我有必要用另外两个片段(B 和 C,在“通常的”列表+查看器配置中)替换活动的一个起始片段(我称之为 A)。目前,我有一个相对布局,其中两个框架布局充当 B 和 C 的占位符:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<RadioGroup
android:id="@+id/radiogroup_navigation"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<!-- Some radiobuttons (not displayed for the sake of brevity) -->
</RadioGroup>
<FrameLayout
android:id="@+id/frame_list"
android:layout_width="100dp"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true"
android:layout_below="@id/radiogroup_navigation">
</FrameLayout>
<FrameLayout
android:id="@+id/frame_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_below="@id/radiogroup_navigation"
android:layout_toRightOf="@id/frame_list">
</FrameLayout>
当我需要显示 A 时,我只需隐藏frame_list并将 A 添加到frame_view,当我需要显示 B 和 CI 时,再次设置frame_list 可见并将两个片段添加到每个帧,在同一个片段事务中。
FragmentTransaction t = getSupportFragmentManager().beginTransaction();
t.remove(fragmentA);
t.add(R.id.frame_list, fragmentB);
t.add(R.id.frame_view, fragmentC);
t.addToBackStack(null);
t.commit();
这样,当我按下后退按钮时,C 和 B 都消失了,我回到了 A 片段,但现在frame_list是可见的(并且是空的)。
我正在考虑以两种可能的方式解决问题:
- 如果需要,覆盖 onBackPressed 以隐藏左框架;
- 将 B 和 C 嵌套在另一个片段中;
但我也觉得我可能以错误的方式看待问题,也许有一个更清洁的设计解决方案。你有什么建议吗?