应用兼容活动设计



为什么AppCompatActivitygetFragmentManager()不返回片段管理器的支持版本? 相反,您必须使您的活动成为AppCompatActivity并专门调用getSupportFragmentManager()。 其他十几种方法也是如此。 令我烦恼的是,您必须神奇地知道哪些方法可以调用它们,哪些方法必须重新命名为"支持"版本。 当您仍然支持较低版本的Android时,甚至有任何用例想要调用"普通"版本而不是"支持"版本? 如果AppCompatActivity与后来的 API 版本的 Activity 没有区别,那对我来说会更有意义——毕竟,这就是它应该做的,不是吗? 提供与更高版本的 Activity 相同的功能?

是否有某种设计原则或隐藏的Java限制阻止他们这样做?

为什么 AppCompatActivity 的 getFragmentManager(( 不返回片段管理器的支持版本?

因为它不能。

Activity 在 API 级别 11+ 上,将getFragmentManager()定义为返回android.app.FragmentManagerAppCompatActivity可以重写它的唯一方法是,如果被覆盖的方法返回一个android.app.FragmentManager。那是不可能的。 AppCompatActivity旨在返回到 API 级别 7,在该级别没有要返回的android.app.FragmentManager。因此,我们有getSupportFragmentManager(),返回一个android.support.v4.app.FragmentManager

请注意,AppCompactActivity 实际上从 FragmentActivity 获取其片段,该片段旨在回到 API 级别 4,比 API 级别 11 和本机片段实现早两年。

最新更新