我的简单布局只有一个片段占位符:
<FrameLayout
android:id="@+id/fragment_placeholder"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
首先我会将第一个Fragment添加到这个占位符中:
fragmentTransaction.add(R.id.fragment_placeholder, firstFragment, "first"); //I did not put to backstack
我有一个第二个片段,它替换了上面的片段并将其放到后台堆栈中:
FragmentManager fragMgr = getSupportFragmentManager();
FragmentTransaction fragTrans = fragMgr.beginTransaction();
//initialize an fragment instance
Fragment secondFragment = initSecondFragment();
//replace with the fragment
fragTrans.replace(R.id.fragment_placeholder, secondFragment, "second");
//Add fragment transaction to back stack
fragTrans.addToBackStack(null);
//commit the transaction
fragTrans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
fragTrans.commit();
稍后我有一些片段替换了以前的片段,但没有放在backstack上。
似乎对于那些没有放在backstack上的片段,它们将始终显示在屏幕上,按下返回按钮将不会对它们产生影响。
所以,如何在我的应用程序中找到那些没有放在backstack上的片段,并如何将它们从屏幕上移除?
addToBackStack()
传递一个标记,你可以通过像FragmentManager上的getBackStackEntry()
这样的方法迭代遍历后退栈条目,以找到具有所需标记的条目。片段本身不在返回堆栈中,片段事务才在。 - CommonsWare