如何破坏碎片?

时间:2011-08-19 08:56:46

标签: android android-fragments

我有一个ActivityActivity有两个Fragment。 片段A是菜单。片段B是细节。

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

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

我该如何处理Fragments.onDestroy()onDetach()?我无法销毁或更改Activity

6 个答案:

答案 0 :(得分:66)

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

fragmentTransaction.remove(yourfragment).commit()

希望对你有所帮助

答案 1 :(得分: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);
}

答案 2 :(得分:5)

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

getFragmentManager().beginTransaction().remove(yourFragment).commitAllowingStateLoss();

或者如果您使用supportLib,则需要致电:

getSupportFragmentManager().beginTransaction().remove(yourFragment).commitAllowingStateLoss();

答案 3 :(得分:0)

如果您在片段中,请使用它。

@Override
        public void onDestroy() {
            super.onDestroy();

            getFragmentManager().beginTransaction().remove((Fragment) youfragmentname).commitAllowingStateLoss();

        }

答案 4 :(得分:0)

在 kotlin 中,我们可以在 Fragment 的任何位置执行此操作

 activity?.run {
     supportFragmentManager.beginTransaction().remove(this@MyFragment)
        .commitAllowingStateLoss()  
   }

答案 5 :(得分:-3)

用于 Kotlin

appCompatActivity?.getSupportFragmentManager()?.popBackStack()