java - 如何删除整个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;
}
所以我希望有一个解决我的全局问题的方法,即:当用户按顺序单击后退按钮时,他在每个片段上不会超过一次谢谢:)
解决方案
推荐阅读
- javascript - 在 Jinja 模板中更改 h1 标签中某个部分的样式
- java - Hibernate:将两列映射到 HashMap 的键和值
- python - 如何在 tkinter 上隐藏和显示画布项目?
- chromium - 如何在运行 puppeteer 抓取脚本时停止打开 chromium 浏览器?
- wso2 - 启用 GroupExtractor 时 wso2am-2.6.0 无法生成令牌
- typescript - 击败阵列
和 IObservableArray 不兼容 - python - SQLAlchemy 对求和连接进行排序和分组
- cmake - CMake - 单个库的 BUILD_SHARED_LIBS
- jenkins - 将附件从 Jenkins 发送到团队
- php - 如何在php中同时使用复选框和输入类型号