如何销毁Backstack上的Fragment?

时间:2014-11-19 21:06:09

标签: android android-fragments

我正在尝试实现一个方法,我想返回到前一个片段并销毁当前片段。但是,当我将片段添加到Backstack时,它不会再被销毁了。

有没有办法摧毁它?或者可能在不使用Backstack的情况下返回上一个片段?

编辑: 我也想使用向后导航。

1 个答案:

答案 0 :(得分:1)

首先,如果您使用BackStack,通常不需要专门手动删除碎片,这表明您可能想要另外考虑一下您的设计。

也就是说,要专门手动删除片段,覆盖显示片段的Activity中的onBackPressed,请手动删除片段。

为了便于确定当前显示的片段,您可以在显示时为其指定标签。例如:

fragTrans.replace(android.R.id.content, myFragment, "MY_FRAGMENT_X");

然后在您的活动的onBackPressed功能

@Override
public void onBackPressed() 
{

    FragmentManager fragMan = getFragmentManager();

    // Check if that Fragment is currently visible
    MyFragment myFragment = (MyFragment)fragMan.findFragmentByTag("MY_FRAGMENT_X");
    boolean myFragXwasVisible = myFragment.isVisible();

    // Let the Activity pop the BackStack as normal
    super.onBackPressed();

    // If it was your particular Fragment that was visible...
    if (myFragXwasVisible) 
    {
        FragmentTransaction trans = fragMan.beginTransaction();
        trans.remove(myFragment).commit();
    }
}

注意:当涉及到专门销毁你的Fragment对象时,这就是Java的垃圾收集。你不需要自己担心,Java会在需要的时候解决这个问题。这就是重点。