AppCompatActivity设计

时间:2017-02-09 21:58:29

标签: android android-fragments android-support-library

为什么AppCompatActivity的{​​{1}}没有返回片段管理器的支持版本?相反,您必须将您的活动设为getFragmentManager()并专门致电AppCompatActivity。对于其他十几种方法也是如此。这让我觉得你必须神奇地知道你可以称之为哪些方法,以及你必须重新命名为“支持”版本。当你还在支持较低版本的Android时,是否还有任何想要调用“普通”版本而不是“支持”版本的用例?如果getSupportFragmentManager()与后来的AppCompatActivity API版本无法区分,那么对我来说更有意义 - 毕竟,这就是它所支持的,不是吗?提供与Activity的后续API版本相同的功能?

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

1 个答案:

答案 0 :(得分:1)

  

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

因为它不能。

API级别11+上的

ActivitygetFragmentManager()定义为返回android.app.FragmentManagerAppCompatActivity覆盖它的唯一方法是,重写的方法返回android.app.FragmentManager。那是不可能的。 AppCompatActivity旨在恢复到API级别7,其中不会返回android.app.FragmentManager。因此,我们getSupportFragmentManager(),返回android.support.v4.app.FragmentManager

请注意,AppCompactActivity确实从FragmentActivity获取了其片段,该片段旨在在API级别11和实现本机片段之前两年回溯到API级别4。