【问题标题】:Fragment with MapView is never removed from FragmentManager永远不会从 FragmentManager 中删除带有 MapView 的片段
【发布时间】:2015-06-04 09:41:03
【问题描述】:

我有一个Fragment,里面有MapView。我使用以下代码将Fragment 添加到容器中:

    Fragment fragment = new MyLocationFragment()
    String tag= fragment.getClass().getName();

    FragmentTransaction transaction = fm.beginTransaction();
    transaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left,
            R.anim.slide_in_left, R.anim.slide_out_right);
    transaction.replace(R.id.container, fragment, tag);
    transaction.addToBackStack(null);
    transaction.commit();

现在当用户按下返回时,这个Fragment 应该从FragmentManager 中删除。但是如果执行这段代码:

    Fragment fragment = getSupportFragmentManager().findFragmentByTag(MyLocationFragment.class.getName());

它永远不会返回null,即使我替换了同一个容器中的其他片段。如何从FragmentManager 中删除Fragment?我在这里做错了吗?

【问题讨论】:

  • 有人知道什么时候应该从 FragmentManager 中删除 Fragment 吗?
  • 它应该在它被破坏后被移除。带有 MapView 的 Fragment 被销毁,但从未从 FragmentManager 中删除,真的很奇怪!
  • 但是您的代码中的删除行在哪里??
  • 当它的事务被添加到 backStack 时,它会在按下 Back 时被移除。
  • 所以就像transaction.remove(fragment)??

标签: android android-fragments android-mapview


【解决方案1】:

当一个活动被销毁时,它的FragmentManager保存它的片段列表。重新创建活动时,新的FragmentManager 会检索列表并重新创建列出的片段以使一切都像以前一样。

[参考书《Android Programming The Big Nerd Ranch Guide》P150]

所以你应该从片段管理器中删除片段。 参考本问答Remove old Fragment from fragment manager

您的问题可能与 thisHow to get a Fragment to remove itself, i.e. its equivalent of finish()?重复

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多