AppCompatActivity设计

AppCompatActivity design

为什么 AppCompatActivitygetFragmentManager() return 没有片段管理器的支持版本?相反,您必须将 Activity 设为 AppCompatActivity 并专门调用 getSupportFragmentManager()。其他十几种方法也是如此。让我感到困扰的是,您必须神奇地知道可以调用哪些方法本身,以及必须将哪些方法重新标记为 "support" 版本。当您仍然支持较低版本的 Android 时,甚至有任何用例想要调用 "normal" 版本而不是 "support" 版本吗?如果 AppCompatActivity 的功能与后来的 API 版本的 Activity 没有区别,那对我来说就更有意义了——毕竟,这就是它应该做的,不是吗?提供与 Activity?

的后续 API 版本相同的功能

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

Why doesn't AppCompatActivity's getFragmentManager() return a support version of the fragment manager?

因为不能。

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

请注意,AppCompactActivity 确实从 FragmentActivity 获取其片段,其设计目的是回到 API 4 级,两年前 API 11 级和原生片段已实施。