我正在使用这一行:
getSupportFragmentManager().popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
在一个内部活动的方法中,通过Fragment访问该方法以清除supportFragmentManager
的整个后台堆栈。但我收到错误java.lang.IllegalStateException: Fragment no longer exists for key f0: index 0
。
这就是我替换碎片的方法:
public void replaceFragment(final Fragment fragment, final String tag){
new Handler().post(new Runnable() {
@Override
public void run() {
manager.beginTransaction()
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.replace(R.id.activity_newsfeed_frame, fragment, tag)
.addToBackStack(tag)
.setAllowOptimization(false)
.commit();
manager.executePendingTransactions();
}
});
}
我在哪里错了?
更新:
尝试使用try catch block
try{
getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
} catch (Exception e){
// TODO
}
但它不起作用。
答案 0 :(得分:0)
尽量不要将第一个片段添加到backstack。
答案 1 :(得分:0)
您需要首先获取后台堆栈片段的数量,然后一次弹出一个片段。
请参阅以下代码
FragmentManager manager = getSupportFragmentManager();
if (manager.getBackStackEntryCount() > 0) {
FragmentManager.BackStackEntry entry= manager.getBackStackEntryAt(0);
manager.popBackStack(entry.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
}