在 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 的最佳方法是啥 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Android Reorder Fragment Backstack
导航到 Jetpack Navigation 中的另一个 Fragment 后将 DialogFragment 保留在 backstack 中