【问题标题】: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 你解决了这个问题吗?我也面临同样的问题。

标签: java android android-fragments fragmentmanager


【解决方案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);

【讨论】:

  • 请提及这将如何解决问题或将起到什么作用
猜你喜欢
  • 1970-01-01
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 2014-11-06
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多