分片交易移除

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);

【讨论】:

请提及这将如何解决问题或将起到什么作用

以上是关于分片交易移除的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB分片集群机制及原理

智能合约重构社会契约以太坊分片

区块链 分片技术和闪电网络区别

以太坊性能优化:分片技术雷电网络Casper-下一代以太坊共识协议

Vitalik :以太坊扩容方案渐趋成熟,分片技术(Sharding)就要来了

ETH vs EOS以太坊放出大招:Sharding(分片)技术!