为什么AppCompatActivity
的getFragmentManager()
返回片段管理器的支持版本?相反,您必须同时让您的活动为AppCompatActivity
,并特别呼叫getSupportFragmentManager()
。其他十几种方法也是如此。它让我感到奇怪,你必须神奇地知道你可以称为自己的哪些方法,以及哪些方法需要重新命名为“支持”版本。当你仍然支持较低版本的Android时,是否还有任何需要调用“正常”版本而不是“支持”版本的用例?如果AppCompatActivity
与Activity
的后续API版本无法区别地运行,那么对我而言会更有意义 - 毕竟,这就是它所支持的,不是吗?提供与Activity
的后续API版本相同的功能?AppCompatActivity设计
是否有某种设计原则或隐藏的Java限制阻止他们这样做?
为什么不,例如,有支持库定义他们自己的'android.app.FragmentManager'版本? (我预测了“那么支持版本会与后来的API中的本地版本冲突”或“安全原因”)的原因,但我不确定) – Erhannis
@Erhannis:“例如,为什么不支持支持库定义他们自己的android.app.FragmentManager版本?“ - 因为那时使用该库的应用程序在API Level 11+上崩溃,而android.app.FragmentManager的实现发生冲突。 – CommonsWare
嗯。如果在ClassLoaders和反射方面没有一些棘手的方法,我会感到惊讶,但我会留下这个。另一种解决方案发生在我身上的将是他们具有子类别的活动,而不是添加方法,所以AppCompatActivity和Activity11或任何都实现了getFragmentManager()与他们自己的版本的FragmentManager。尽管如此,我不能说我喜欢那种方式。烦人的不整洁。好,我屈服;谢谢。尽管如此,我仍然不太喜欢所有的“支持”方法;它也是不整洁的。 – Erhannis