从后面的堆栈中移除碎片

当一个平板电脑拿着肖像时,我有一个活动的3个片段。 但是,我在景观中只有2个这些碎片。 我遇到的问题是从纵向到横向的活动正在创build第三个片段。 我收到和错误,因为这个片段不能创build。

我已经确定这个片段正在创build,因为它在后面的堆栈。

我试图通过使用删除onDestroy方法中的片段

FragmentTransaction f = fragmentManager.beginTransaction(); f.remove(mf); f.commit(); 

然而,我得到一个错误,说我不能在onSaveInstanceState后面使用这个函数

将这个片段从后面堆栈中取出的正确方法是什么?

更新

我应该补充一点,我遇到的问题是来自这个库的mapFragment

https://github.com/petedoyle/android-support-v4-googlemaps

我用它的方式就是这样

 mf = MapFragment.newInstance(1, true); ft = fragmentManager.beginTransaction(); ft.replace(R.id.mapContainer, mf); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.addToBackStack("map"); ft.commit(); 

您可以使用FragmentManagerpopup方法从FragmentTransaction中将其添加到backstack中,并从backstack中移除:

 FragmentManager manager = getActivity().getSupportFragmentManager(); FragmentTransaction trans = manager.beginTransaction(); trans.remove(myFrag); trans.commit(); manager.popBackStack(); 

我创build了一个代码跳转到所需的后退栈索引,它工作正常,我的目的。

即。 我有Fragment1,Fragment2和Fragment3,我想从Fragment3跳到Fragment1

我在Fragment3中创build了一个名为onBackPressed的方法,它跳转到Fragment1

Fragment3:

 public void onBackPressed() { FragmentManager fragmentManager = getFragmentManager(); fragmentManager.popBackStack(fragmentManager.getBackStackEntryAt(fragmentManager.getBackStackEntryCount()-2).getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE); } 

在这个活动中,我需要知道我目前的片段是否是Fragment3,所以我调用片段的onBackPressed而不是调用super

FragmentActivity:

 @Override public void onBackPressed() { Fragment f = getSupportFragmentManager().findFragmentById(R.id.my_fragment_container); if (f instanceof Fragment3) { ((Fragment3)f).onBackPressed(); } else { super.onBackPressed(); } } 

如果你想删除的片段不在栈顶,会发生什么?

那么你可以使用这些function

popBackStack(int arg0, int arg1);

popBackStack(String arg0, int arg1);