【发布时间】:2014-08-15 19:14:19
【问题描述】:
我有一个使用抽屉式导航的应用程序。抽屉让您可以在 2 个片段之间导航:F1 和 F2:
活动布局:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"/>
<!-- The navigation drawer -->
<ListView android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:dividerHeight="0dp"
android:background="#f5f5f5"/>
</android.support.v4.widget.DrawerLayout>
在Activity中替换片段的代码:
private void selectItem(int position) {
Fragment fragment;
fragment = getFragmentToDisplay(position);
if(fragment != null)
{
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.content_frame, fragment,"fragment_"+position)
.commit();
}
}
在 F1 上,我有一个按钮可以调用另一个片段 (F3)。当 F3 替换 F1 时,我使用 addToBackStack() 可以通过按回车键返回到 F1。
将 F1 替换为 F3:
getFragmentManager().beginTransaction()
.replace(R.id.content_frame, new GameFragment())
.addToBackStack("Games").commit();
从 F1 到 F2 , F2 到 F1 完美运行。
从 F1 到 F3 , F3 到 F1 (使用后退按钮)也可以。
尽管如此,如果我正在执行此序列:
按按钮 F1 到 F3。
导航抽屉按 F3 到 F2。
F2 到 F1 通过返回按钮(backstack)。
导航抽屉 F1 到 F2
最后一个片段 (F2) 不会替换 F1 ,而是出现在上方,就像我添加了它一样:
执行相同的导航但不使用后退按钮按预期工作。
为什么 backstack 搞乱了片段替换?
我的目标是在 F1 和 F3 之间提供后退导航,但不在导航抽屉访问的片段之间提供导航。
【问题讨论】:
标签: android android-fragments navigation back-stack