Android Fragment未添加到Back Stack

前端之家收集整理的这篇文章主要介绍了Android Fragment未添加到Back Stack前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在做一个基于NavigationDrawer的应用程序.我有一个如下所示的层次结构

NavigationDrawer –> RootFragment(Not added to back Stack) –> Detail
Fragment (Added to Back Stack)

现在,我试图通过按后退按钮尝试退出应用程序时向用户显示一条消息.这是我正在使用的代码.

  1. @Override
  2. public void onBackPressed() {
  3. if (getFragmentManager().getBackStackEntryCount() > 0) {
  4. getFragmentManager().popBackStack();
  5. }
  6. else if (getFragmentManager().getBackStackEntryCount() == 0) {
  7. new AlertDialog.Builder(this)
  8. .setMessage("Are you sure you want to exit?")
  9. .setCancelable(false)
  10. .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
  11. public void onClick(DialogInterface dialog,int id) {
  12. MainActivity.this.finish();
  13. }
  14. })
  15. .setNegativeButton("No",null)
  16. .show();
  17. }
  18. else
  19. {
  20. super.onBackPressed();
  21. }
  22. }

当我从详细信息片段中单击后退按钮(添加后台堆栈)时,我收到警报消息.相反,我会回到根片段.

但是,如果我像这样更新代码,按后退按钮会将用户带回到根视图.所以它看起来像getFragmentManager().getBackStackEntryCount()即使将详细片段添加后台堆栈也是零.

  1. @Override
  2. public void onBackPressed() {
  3. if (getFragmentManager().getBackStackEntryCount() > 0) {
  4. getFragmentManager().popBackStack();
  5. }
  6. else
  7. {
  8. super.onBackPressed();
  9. }
  10. }

以下是我从rootFragment调用详细信息片段的方法.

  1. FragmentManager fragmentManager = getFragmentManager();
  2. Fragment fragment = SubCategoryListFragment.newInstance(false);
  3. fragmentManager.beginTransaction()
  4. .add(R.id.subCategoryDetails,fragment)
  5. .addToBackStack(null)
  6. .commit();

这是从导航抽屉侧面菜单打开的根视图.

我在这做错了什么?什么是正确的实现方式?

谢谢.

最佳答案
假设您正在使用支持片段,则必须在Activity中使用getSupportFragmentManager().使用getFragmentManager(),您将获得本机片段管理器.但是,在支持片段类中,getFragmentManager()返回支持片段管理器,这可能有点令人困惑.

猜你在找的Android相关文章