我有一个片段,我用这样的标签添加:
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()
时,我应该得到一个null,但是,下次我称之为:
fragment = getActivity().getSupportFragmentManager().findFragmentByTag(fragment_tag);
if(fragment != null)
if语句为true,因此它实际上找到了带有该标记的片段!
我的问题是,我如何完全删除片段?
考虑到要删除的片段可能不在backstack的顶部,这意味着popBackStack()
不是解决方案。
答案 0 :(得分:0)
删除片段后,它可能仍然在片段管理器后面的堆栈中,所以要完全删除它,你必须从片段管理器后面的堆栈中删除它,所以你必须通过调用将它从后面的栈中弹出fragmentManager.popBackStack(String,int)方法......
答案 1 :(得分:-1)
int index = getSupportFragmentManager().getFragments().indexOf(oldfragment);
getSupportFragmentManager().getFragments().set(index, null);