清除整个靠背时,碎片不再存在

时间:2017-02-03 03:37:29

标签: android android-fragments

我正在使用这一行:

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
    }

但它不起作用。

2 个答案:

答案 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);
        }