【发布时间】:2015-08-11 00:55:34
【问题描述】:
我正在像这样动态添加一个片段:
FragmentManager fm = getChildFragmentManager();
mFragmentManager.beginTransaction().replace(R.id.learn_detail, detailFragment, LEARN_FRAGMENT_THREATS).commit();
mFragmentManager.executePendingTransactions();
当我添加不同的片段 R.id.learn_detail(这是一个 Framelayout)时,我调用了相同的代码
片段被替换得很好,但我注意到旧片段仍然存在于内存中。
每次调用replace 时,调用mFragmentManager.getFragments 都会返回一个越来越大的列表。我希望replace 销毁旧片段并在 FrameLayout 中添加新片段。想法?
编辑 - 我的问题是我总是在创建一个新片段,无论如何。我的完整方法最终看起来像这样:
private LearnPageFragment getPageFragment(LearnPageItem item) {
LearnPageFragment learnPageFragment = (LearnPageFragment) mFragmentManager.findFragmentByTag(LEARN_FRAGMENT_PAGE);
if (learnPageFragment == null) {
learnPageFragment = LearnPageFragment.newInstance(item);
} else {
//Destroy the view and update the item data
mFragmentManager.beginTransaction().remove(learnPageFragment).commit();
mFragmentManager.executePendingTransactions();
learnPageFragment.getArguments().putSerializable(LearnPageFragment.k_CONTENT, item);
}
return learnPageFragment;
}
我接受了让我走上正轨的答案。我不应该尝试从片段管理器中手动删除片段。
【问题讨论】:
-
您应该先删除现有的 Fragment 并添加新的 Fragment 而不是使用 replace。 :) 这是我的想法。
-
这不是替换的作用吗?立即测试您的建议。