为什么AppCompatActivity
的{{1}}没有返回片段管理器的支持版本?相反,您必须将您的活动设为getFragmentManager()
并专门致电AppCompatActivity
。对于其他十几种方法也是如此。这让我觉得你必须神奇地知道你可以称之为哪些方法,以及你必须重新命名为“支持”版本。当你还在支持较低版本的Android时,是否还有任何想要调用“普通”版本而不是“支持”版本的用例?如果getSupportFragmentManager()
与后来的AppCompatActivity
API版本无法区分,那么对我来说更有意义 - 毕竟,这就是它所支持的,不是吗?提供与Activity
的后续API版本相同的功能?
是否有某种设计原则或隐藏的Java限制阻止他们这样做?
答案 0 :(得分:1)
为什么AppCompatActivity的getFragmentManager()不返回片段管理器的支持版本?
因为它不能。
API级别11+上的 Activity
将getFragmentManager()
定义为返回android.app.FragmentManager
。 AppCompatActivity
覆盖它的唯一方法是,重写的方法也返回android.app.FragmentManager
。那是不可能的。 AppCompatActivity
旨在恢复到API级别7,其中不会返回android.app.FragmentManager
。因此,我们getSupportFragmentManager()
,返回android.support.v4.app.FragmentManager
。
请注意,AppCompactActivity
确实从FragmentActivity
获取了其片段,该片段旨在在API级别11和实现本机片段之前两年回溯到API级别4。