在不导致 illegalStateException 的情况下弹出返回堆栈

Poping the backstack without causing illegalStateException

我得到了
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

在我的代码中,我搜索了 statckoverflow,我得到了以下代码作为解决方案。

现在我没有收到 IllegalStateException,但问题是.. 下面的代码正在清除整个堆栈跟踪。但我只想弹出后台堆栈中的最后一个 transaction/entry 。怎么做?

            if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
                getSupportFragmentManager().popBackStack(getSupportFragmentManager().getBackStackEntryAt(0).getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
            }

如何只弹出后台堆栈中的最后一个transaction/entry?

我如何添加到堆栈的代码:

      fragmentManager.beginTransaction().
                setCustomAnimations(R.anim.slide_in_left, R.anim.slide_in_left, R.anim.slide_out_right, R.anim.slide_out_right).
                replace(R.id.content_frame, pageFragment, currentItem).
                addToBackStack(currentItem).
                commit();

弹出最后一个交易条目:

int last = getActivity().getSupportFragmentManager().getBackStackEntryCount() - 1
FragmentManager.BackStackEntry entry = getSupportFragmentManager().getBackStackEntryAt(last);
String tag = entry.getName();
Fragment fragment = getSupportFragmentManager().findFragmentByTag("last");  //get the last fragment

此外,在交易期间您必须添加标签..

fragmentTransaction.addToBackStack("last");

也可以用popBackStackImmediate弹出最后一个片段:

getSupportFragmentManager().popBackStackImmediate(getSupportFragmentManager().getBackStackEntryAt(last), FragmentManager.POP_BACK_STACK_INCLUSIVE);

要使用标记从 BackStack 中弹出片段,请使用:

 getSupportFragmentManager().popBackStack ("last", FragmentManager.POP_BACK_STACK_INCLUSIVE);

对于此错误:

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

而不是 commit(),使用 commitAllowingStateLoss() 问题就会消失。然后使用您想要的方法。