分片交易移除
Posted
技术标签:
【中文标题】分片交易移除【英文标题】:Fragment transaction remove 【发布时间】:2017-12-18 09:15:24 【问题描述】:我有一个片段,我用这样的标签添加它:
getSupportFragmentManager().beginTransaction().add(R.id.fragment_container,fragment,fragment_tag).commit();
在某个时候,在另一个片段中,我需要删除这个片段,所以我调用:
fragment = getActivity().getSupportFragmentManager().findFragmentByTag(fragment_tag);
if(fragment != null && fragment.isAdded())
fragmentManager.beginTransaction().remove(fragment).commit();
理论上,下次我为刚刚删除的片段调用findFragmentByTag()
时,我应该得到一个空值,但是,下次我调用这个时:
fragment = getActivity().getSupportFragmentManager().findFragmentByTag(fragment_tag);
if(fragment != null)
if 语句为真,因此它实际上找到了带有该标签的片段!
我的问题是,我如何完全删除片段?
考虑到要删除的片段可能不在后台堆栈的顶部,这意味着popBackStack()
不是解决方案。
【问题讨论】:
诀窍是你找到的片段是isRemoving
,所以你可以忽略它。
@Ricardo 你解决了这个问题吗?我也面临同样的问题。
【参考方案1】:
删除片段后,它可能仍在片段管理器返回堆栈中,因此要完全删除它,您必须从片段管理器返回堆栈中删除 if,因此您必须通过调用将其从返回堆栈中弹出fragmentManager.popBackStack(String, int) 方法...
查看方法 Fragment Manager pop back stack method
【讨论】:
感谢您的关注。检查我编辑的问题。该片段可能不在后台堆栈的顶部 你试过了吗?如果你想立即删除它,你可以调用 popackStackImmeditely(); 我确实尝试过。我已经搜索了提供此解决方案的 SOF,但这对我的情况没有帮助 并且该片段没有在活动布局文件中声明? 假设我有5个片段,它们被添加到活动中,我打算删除的片段不在后台堆栈的顶部。全部添加到activity中,每一个都有自己的tag【参考方案2】:int index = getSupportFragmentManager().getFragments().indexOf(oldfragment);
getSupportFragmentManager().getFragments().set(index, null);
【讨论】:
请提及这将如何解决问题或将起到什么作用以上是关于分片交易移除的主要内容,如果未能解决你的问题,请参考以下文章
以太坊性能优化:分片技术雷电网络Casper-下一代以太坊共识协议