首页 > 解决方案 > 如何删除整个fragmentTransaction

问题描述

我是一名 android 初学者,我正在努力解决一个问题:我有一个管理 4 个片段的活动。我希望这样,当我向 backStack 添加一个片段时,它会从 backStack 中删除相同的片段(如果有的话),以便每个片段在 backstack 中只有一次。如果用户从 A 到 B 到 C,然后返回到 B,则返回堆栈看起来像:C,A 而不是 C,B,A。

我一直在寻找解决问题的方法,但发现很多人都有相同的问题:从后堆栈中删除片段 如何避免将相同的片段添加到堆栈 中 最建议的解决方案是 popBackStackImmediate(String, int ) 但最大的问题是这个函数删除了已弹出堆栈顶部的堆栈。这种行为似乎是不可改变的。所以我想出了一个解决方案,它包括通过 for 循环运行 BackStack,当我的片段标签和 BackStack 中的片段匹配时,我删除堆栈。我认为这个堆栈是一个 fragmentTransaction 所以我想知道是否可以删除整个 Fragment Tansaction 以及如何做到这一点:)

private void setFragment(Fragment fragment) {
        FragmentManager manager = getSupportFragmentManager();
        String tagFromFragAddedToBackStack = getCurrentFragment().getTag();
        String fragmentTag = fragment.getClass().getName();
        String fragFromBackStackTag;
        FragmentTransaction fragTransFromBackStack;
        int i;

        for ( i = 0; i < manager.getBackStackEntryCount() ; i++){

                fragFromBackStackTag = manager.getBackStackEntryAt(i).getName();
                fragTransFromBackStack = (FragmentTransaction) manager.getBackStackEntryAt(i);
                fragFromBackStack = manager.findFragmentByTag(fragFromBackStackTag);

                if (fragFromBackStackTag == fragmentTag){

              // Here, I would like to delete the stack which matches 

                }
            }
            FragmentTransaction ft = manager.beginTransaction();
            ft.replace(R.id.main_frame, fragment, fragmentTag);
            ft.addToBackStack(tagFromFragAddedToBackStack); 
            ft.commit();
    }

  private Fragment getCurrentFragment(){
        if (homeFragment.isVisible()){
            return homeFragment;
        }
        else if (autonomyFragment.isVisible()) {
            return autonomyFragment;
        }
        else if (shopFragment.isVisible()) {
            return shopFragment;
        }
        else if (accountFragment.isVisible()) {
            return accountFragment;
        }
        else
            return null;
    }

所以我希望有一个解决我的全局问题的方法,即:当用户按顺序单击后退按钮时,他在每个片段上不会超过一次谢谢:)

标签: javaandroidandroid-fragmentsfragmenttransactionfragment-backstack

解决方案


推荐阅读