在 Fragment 中管理 BackStack 的最佳方法是什么

问题描述

你好,我想在片段中管理 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;
            };

解决方法

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

,

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