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

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

当我在第二个片段上时,第一次按下后退按钮而第二次关闭应用程序时,什么也没有发生。这是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个片段,因为我已经在努力添加新片段。

最佳答案

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

关于android - Fragment和BackStack无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39411001/

10-12 02:56