Fragment和BackStack无法正常工作

时间:2016-09-09 11:53:40

标签: android android-fragments

我的MainActivity包含一个带有两个片段的导航抽屉。应用程序启动时会自动加载第一个片段。我希望应用程序在按下后退按钮时从片段2切换到片段1,或者如果添加了第一个片段,则退出应用程序。我将第一个片段的fragmentTransaction添加到堆栈,然后在我的popBackStack方法中调用onBackPressed。然而,这种行为很奇怪。

当我在第一个片段时,应用程序应该退出(即执行super.onBackPressed)但是当在第一个片段上并按下时,第一个片段从片段持有者中移除,导致空白屏幕,然后按下应用程序第二次关闭。

当我在第二个片段上时,第一次按下后退按钮并且第二次按下后退按钮时应用程序关闭时没有任何反应。这是MainActivity.java的相关代码

    @Override
    public void onBackPressed() {

        if (musicService.isPng()) moveTaskToBack(true);

        if (getFragmentManager().getBackStackEntryCount() > 0)
            getFragmentManager().popBackStack("returnFragment", 0);

        else super.onBackPressed();
    }


private void loadSelection(int i) {
        navList.setItemChecked(i, true);

        switch (i) {

            case 0:
                FirstFragment firstFragment = new FirstFragment();
                fragmentTransaction = fragmentManager.beginTransaction();
                fragmentTransaction.replace(R.id.fragmentholder, firstFragment)
                        .addToBackStack("returnFragment")
                        .commit();
                break;

            case 1:
                SecondFragment secondFragment = new SecondFragment();
                fragmentTransaction = fragmentManager.beginTransaction();
                fragmentTransaction.replace(R.id.fragmentholder, secondFragment)
                        .commit();
                break;

            case 2:
                musicService.removeNotification();
                musicService.stopSelf();
                MainActivity.this.finish();
        }

    }

在MainActivity的onCreate中调用loadSelection(0)

与代码中给出的不同,我尝试了各种实现popBackStack()方法的模式,但它们都导致了相同的结果。只是要添加我不想实现一个解决方法,因为我已经在处理添加新片段,因为只有2个片段。

1 个答案:

答案 0 :(得分:4)

试试这个, 调用方法.addToBackStack(“returnFragment”),同时加载第二个片段并从第一个事务中删除它。