在不导致 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()
问题就会消失。然后使用您想要的方法。
我得到了
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()
问题就会消失。然后使用您想要的方法。