【问题标题】:AppCompat v7: Should I use Framework FragmentManager or SupportFragmentManager?AppCompat v7:我应该使用 Framework FragmentManager 还是 SupportFragmentManager?
【发布时间】:2015-01-08 10:17:15
【问题描述】:

我正在制作一个 minSdk = 15 和 targetSdk = 21 的应用,因此我想使用 appcompat-v7 库提供的功能。

我一直想知道在使用 supportlibrary-v7 时是否应该使用 getFragmentManager 或 getSupportFragmentManager。

我现在遇到一个小问题:当使用 getFragmentManager(因此使用框架片段和 fragmenttransaction)时,我无法通过简单地按下后退按钮来弹出后退堆栈 - 我必须进行 backStackCount > 0 检查并手动 popBackStack,否则我的活动就结束了。当我将我的小应用程序切换为使用 v4 类(getSupportFragmentManager 等)时,这个问题得到了解决。我想这很好,但我想有一个指南/最佳实践来知道该走哪条路以及为什么

那么,我的 Activity 继承自 ActionBarActivity(根据 AppCompat-Blog-Entry)并且我正在使用新的工具栏,我应该只使用 v4-Fragments(-Manager, -Transactions) 吗?

我还没有找到任何最佳实践或指导方针。而且我不确定在这两者之间做出决定时要考虑什么:-/

【问题讨论】:

  • 我的应用程序中遇到了同样的问题,答案是:使用库提供的关于片段的类。因为有一些像FragmentPagerAdapter 这样的类只能与支持库一起使用,所以最好使用与片段相关的支持库的所有类。
  • 实际上有一个v13.FragmentPagerAdapter 可以与框架片段一起使用。但是,这仍然不是 IMO 的真正准则。正如我所说,出于一致性原因,我完全切换到 v4。

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


【解决方案1】:

如果您从ActionBarActivity 继承您的活动,则应始终使用getSupportFragmentManager()。如果手机支持(运行 Honeycomb 或更高版本),它会自动将您的呼叫转接到 getFragmentManager(),否则使用其兼容性实现。

【讨论】:

  • 我使用 appcompat-v7 不仅仅是因为 Fragment 支持(我知道 Fragment 支持是在 API 15 之前添加的)。主要原因是因为我想使用 API 21 中引入的一些功能,例如 Toolbar 或 MaterialDesign-Theme。所以 AFAIK 我需要使用 appcompat-v7。
  • 在这种情况下选择ActionBarActivity。如果您打算使用 Toolbar,您很可能需要在 API 21 之前不可用的 setActionBar(...) 方法 - 请改用 setSupportActionBar(...)
  • 你说得对,我需要使用setSupportActionBar() 方法。所以,基本上,因为我使用了 AppCompat,我应该使用所有的支持方法?
  • 感谢您的回答。这仍然不是很令人满意,因为我仍然不知道为什么以及何时需要使用支持功能。我会接受你的回答,但最后一段是错误的 IMO。
  • 供将来参考:FragmentActivity 中的支持片段管理器不会将任何调用转发到框架片段管理器。这可以在源代码 (android.googlesource.com/platform/frameworks/support/+/refs/…) 中看到,并在文档中说明:“在 Android 3.0 或更高版本上运行时,仍使用此实现;它不会尝试切换到框架的实现。” (developer.android.com/reference/android/support/v4/app/…)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
  • 1970-01-01
  • 2018-09-05
  • 1970-01-01
  • 2014-12-30
  • 1970-01-01
相关资源
最近更新 更多