为什么AppCompatActivity
的getFragmentManager()
不返回片段管理器的支持版本? 相反,您必须使您的活动成为AppCompatActivity
并专门调用getSupportFragmentManager()
。 其他十几种方法也是如此。 令我烦恼的是,您必须神奇地知道哪些方法可以调用它们,哪些方法必须重新命名为"支持"版本。 当您仍然支持较低版本的Android时,甚至有任何用例想要调用"普通"版本而不是"支持"版本? 如果AppCompatActivity
与后来的 API 版本的 Activity
没有区别,那对我来说会更有意义——毕竟,这就是它应该做的,不是吗? 提供与更高版本的 Activity
相同的功能?
是否有某种设计原则或隐藏的Java限制阻止他们这样做?
为什么 AppCompatActivity 的 getFragmentManager(( 不返回片段管理器的支持版本?
因为它不能。
Activity
在 API 级别 11+ 上,将getFragmentManager()
定义为返回android.app.FragmentManager
。AppCompatActivity
可以重写它的唯一方法是,如果被覆盖的方法也返回一个android.app.FragmentManager
。那是不可能的。 AppCompatActivity
旨在返回到 API 级别 7,在该级别没有要返回的android.app.FragmentManager
。因此,我们有getSupportFragmentManager()
,返回一个android.support.v4.app.FragmentManager
。
请注意,AppCompactActivity
实际上从 FragmentActivity
获取其片段,该片段旨在回到 API 级别 4,比 API 级别 11 和本机片段实现早两年。