android - 避免多次将相同的片段添加到 backStack
问题描述
我有一个包含 4 个片段的活动。我想避免用户在退出前点击 100 次的情况。当一个片段被设置时,它被添加到后台堆栈。例如:用户按以下顺序设置片段:1、2、3、4 然后他设置片段 2 和 4。我的 backStack 看起来像这样(片段 4 可见):2、4、3、2、1 并退出。我希望我的 backStack 看起来像:2、3、1 并退出。
我试图用 popBackStackImmediate(string, int flags) 解决我的问题,就像在这篇文章中一样: 防止同一片段堆叠不止一次(addToBackStack) 但我的 backStack 看起来像(有 4 个可见)2、1 并退出。我推断 popBackStackImmediate() 正在删除弹出堆栈顶部的堆栈(我希望你知道我的意思)。
private void setFragment(Fragment fragment) {
String backStateName = fragment.getClass().getName();
FragmentManager manager = getSupportFragmentManager();
boolean fragmentPopped = manager.popBackStackImmediate (backStateName, 0);
if (!fragmentPopped){ //fragment not in back stack, create it.
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.main_frame, fragment);
ft.addToBackStack(backStateName);
mMainNav.setItemBackgroundResource(R.color.PopWindowBorder_HomeRenovationfragment);
ft.commit();
}
}
我希望每个片段在后台堆栈中不超过一次,而不会破坏后台堆栈的顺序,以便拥有一个看起来像这样的后台堆栈:2、3、1 并退出。:)
解决方案
请找到以下代码,因为它可以帮助您,我也可以在评论部分添加它,但我的声誉不足以添加评论
private fun loadFragment(fragment: Fragment, previousFragment: Fragment?) {
val transaction = supportFragmentManager.beginTransaction()
if (supportFragmentManager.findFragmentByTag(fragment::class.java.simpleName) != null) {
if (previousFragment != null) {
transaction.hide(previousFragment).show(fragment).commit()
} else {
transaction.show(fragment).commit()
}
} else {
if (previousFragment != null) {
transaction.hide(previousFragment).add(R.id.frame_container, fragment, fragment::class.java.simpleName).addToBackStack(null).commit()
} else {
transaction.add(R.id.frame_container, fragment, fragment::class.java.simpleName).addToBackStack(null).commit()
}
}
this@BaseActivity.previousFragment = fragment
}
推荐阅读
- c# - Mailkit:获取阅读电子邮件的时间
- coq - 在 Coq 中进行介绍的案例分析
- java - 如何为 Spring Boot 项目设置 Google Cloud Compute Engine?
- java - 致命异常:OkHttp Dispatcher 尝试使用 Retrofit 从 API 检索数据时
- c++ - std::filesystem 和 std::experimental::filesystem 之间的路径连接差异
- asp.net-core - 想用 bootstrap 集成 Asp.net core 和 Vue JS
- r - 使pickerInput更暗
- reactjs - Jest/Enzyme React 分支
- java - 从 ArCore 中的锚点移除所有旋转
- javascript - 如何将限制过滤器应用于 cubeJs 的 timeDimension 属性?