我正在尝试实现一个方法,我想返回到前一个片段并销毁当前片段。但是,当我将片段添加到Backstack时,它不会再被销毁了。
有没有办法摧毁它?或者可能在不使用Backstack的情况下返回上一个片段?
编辑: 我也想使用向后导航。
答案 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会在需要的时候解决这个问题。这就是重点。