如何破坏碎片?

Ign*_*ion 49 android android-fragments

我有一个Activity.将Activity有两个Fragment秒.片段A是菜单.片段B是细节.

我尝试在片段B中创建其他片段C,因此,在片段中有3个片段Activity.我试图将片段B替换为片段D.

我猜片段B和C已经死了.但这些碎片还活着.Just Fragments是onDestroyView()州.我想要onDestroy()onDetach().

我该怎么做对Fragments.onDestroy()还是onDetach()?我不能破坏或改变Activity.

小智 69

如果您不手动删除这些片段,它们仍会附加到活动中.你的活动没有被破坏所以这些碎片也是如此.要删除(破坏)这些片段,您可以调用:

fragmentTransaction.remove(yourfragment).commit()
Run Code Online (Sandbox Code Playgroud)

希望它对你有所帮助

  • 哇,这使得用于replace()的Google文档完全错误:``这与使用相同的containerViewId添加的所有当前添加的片段调用remove(Fragment)基本相同,然后添加(int,Fragment,String)这里给出的相同论点.`实际上,只有调用remove()才会破坏片段,而替换则不会. (8认同)
  • 我无法以这种方式杀死我的片段.这究竟应该在哪里? (4认同)

Man*_* MM 10

尝试一下这个

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    // TODO Auto-generated method stub

    FragmentManager manager = ((Fragment) object).getFragmentManager();
    FragmentTransaction trans = manager.beginTransaction();
    trans.remove((Fragment) object);
    trans.commit();

    super.destroyItem(container, position, object);
}
Run Code Online (Sandbox Code Playgroud)

  • 您可以在FragmentPagerAdapter类中找到它,但我不认为该问题是针对视图分页器的 (2认同)

Far*_*aev 6

如果你在片段本身,你需要调用它.您的片段需要是被调用的片段.输入代码:

getFragmentManager().beginTransaction().remove(yourFragment).commitAllowingStateLoss();
Run Code Online (Sandbox Code Playgroud)

或者如果您正在使用supportLib,那么您需要致电:

getSupportFragmentManager().beginTransaction().remove(yourFragment).commitAllowingStateLoss();
Run Code Online (Sandbox Code Playgroud)