在 Fragment 中管理 BackStack 的最佳方法是啥 [重复]

Posted

技术标签:

【中文标题】在 Fragment 中管理 BackStack 的最佳方法是啥 [重复]【英文标题】:What is the best way to manage BackStack in Fragment [duplicate]在 Fragment 中管理 BackStack 的最佳方法是什么 [重复] 【发布时间】:2021-08-31 00:40:45 【问题描述】:

您好,我想在片段中管理 BackStack 我已经实现了一个方法,但我对它不满意,因为如果我一次又一次地切换到多个片段,那么我希望那个 backstack 不要一次又一次地切换到同一个片段,然后就去每个片段向后一次,最后一次到 Home_Fragment 然后退出

例如:如果我从通知切换到配置文件并通过一次又一次按下它使其像一个循环,当我开始按下它时它也遵循我不想要的相同循环,我希望即使用户也做一个像这样的事情,后堆栈只去每个片段一次,最后去主片段并退出

就像像 instagram 或 pintrest 这样的大应用程序

这是一个代码

private final BottomNavigationView.OnNavigationItemSelectedListener navigationItemSelectedListener =
            item -> 
                Fragment selectedFragment = null;
                switch (item.getItemId()) 
                    case R.id.nav_home:
                        selectedFragment = new Home_Fragment();
                        break;
                    case R.id.nav_following:
                        selectedFragment = new Following_Fragment();
                        break;
                    case R.id.nav_upload:
                        selectedFragment = new Upload_Fragment();
                        break;
                    case R.id.nav_notification:
                        selectedFragment = new Notification_Fragment();
                        break;
                    case R.id.nav_profile:
                        selectedFragment = new Profile_Fragment();
                        break;
                
                assert selectedFragment != null;
                getSupportFragmentManager().beginTransaction().addToBackStack(String.valueOf(selectedFragment)).replace(R.id.fragment_container,
                        selectedFragment).commit();
                return true;
            ;

【问题讨论】:

您可能会发现导航组件更容易使用:developer.android.com/guide/navigation/… 我会说现在相当容易。 Follow this 。如果我有时间,我会为此添加一个示例,因为我自己找不到。 【参考方案1】:

我很难理解问题/问题,但如果您想避免重新添加已经添加的片段,那么您可以在添加新片段之前检查堆栈是否已经存在。这个article 可能会有所帮助。

【讨论】:

例如:如果我从通知切换到配置文件并通过一次又一次按下它使其像一个循环,当我开始按下它时它也遵循我不想要的相同循环,我想要即使用户做这样的事情,后堆栈也只会进入每个片段一次,最后进入主片段并退出,希望它能帮助你更好地理解我的问题,对不起【参考方案2】:

使用popBackStackImmediate("your-tag",0)findFragmentByTag 中的fragmentManager 并替换它(小心一次又一次地添加到后台堆栈)。

【讨论】:

你能解释一下代码,我可以试试

以上是关于在 Fragment 中管理 BackStack 的最佳方法是啥 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

具有多个 backstack 的片段

Android Reorder Fragment Backstack

导航到 Jetpack Navigation 中的另一个 Fragment 后将 DialogFragment 保留在 backstack 中

BackStack 没有导航到正确的 Fragment

当 ViewPager 中的 Fragment 从 BackStack 保留时 WebView 重新加载

带有嵌套/子片段的 Android Backstack