按“返回”按钮时,片段无法返回到先前的状态

时间:2015-12-31 04:29:28

标签: android android-fragments back-button android-tablayout

您好我有一个应用程序如下:MainActivity使用navigationDrawerfragment之间导航,例如fragment1fragment2,{{1} }。 fragment3包含Fragment1 tablayout和孩子fragment1-A以及fragment1-B。当用户在fragment1-C中单击按钮时,他们将转到另一个fragment1-B(此事务将添加到backstack)。当用户在fragment1-B-a中按backButton时。他们将通过fragment1-B-a中的这些代码返回fragment1-B

MainActivity

但是当用户在@Override public void onBackPressed() { DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); } else { // if got BackStack, come back to it if (fragmentManager.getBackStackEntryCount()>0) { super.onBackPressed(); // if not come to home screen }else { if (!homeFlag) { fragment = new MainFragment(); fragmentManager.popBackStack(); fragmentManager.beginTransaction().replace(R.id.contentMainDrawer, fragment).commit(); homeFlag = true; } else exit(); } } } (第二fragment1-B-a tablayout)内时,如果他们按fragment。它会给出错误并导致应用崩溃(在BackButton内按fragment1-B-a正常工作)

这是错误。 Anyhelp非常感谢。感谢。

backButton

2 个答案:

答案 0 :(得分:0)

  • 商店片段名称是公共静态变量lastFragment ...
  • 每当通过设置其先前的片段移动到新片段时更新它....
  • 在主要活动中将其设为空... -exit app如果为null,否则使用lastFragment替换fragmentmanger。

答案 1 :(得分:0)

确定。我遇到了你的问题。这是因为getBackStackEntryCount()返回零。 因此,您需要在提交片段onBackPressed按钮后添加以下行。

fragmentManager.executePendingTransactions();

并添加

fragmentManager(null,FragmentManager.POP_BACK_STACK_INCLUSIVE)而不是 fragmentManager.popBackStack();

FragmentManager.POP_BACK_STACK_INCLUSIVE)用于弹出整个后台堆栈。

请参阅此discussion

在您的代码中进行编辑:

@Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            // if got BackStack, come back to it
            if (fragmentManager.getBackStackEntryCount()>0) {
                super.onBackPressed();

                // if not come to home screen
            }else {
                if (!homeFlag) {
                    fragment = new MainFragment();
                   fragmentManager(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)// Change
                    fragmentManager.beginTransaction().replace(R.id.contentMainDrawer, fragment).commit();
fragmentManager.executePendingTransactions();// Change
                    homeFlag = true;
                } else exit();
            }
        }
    }

希望对你有所帮助。