アクティビティの 1 つの開始フラグメント (A と呼びます) を他の 2 つのフラグメント (「通常の」リスト + ビューアー構成の B と C) に置き換える必要があります。現在、B と C のプレースホルダーとして機能する 2 つのフレーム レイアウトを含む相対レイアウトがあります。
<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を再度表示し、同じフラグメント トランザクションで各フレームに 2 つのフラグメントを追加します。
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が表示されます (そして空になります)。
私は2つの可能な方法で問題を解決することを考えています:
- 必要に応じて onBackPressed をオーバーライドして左フレームを非表示にします。
- B と C を別のフラグメントにネストします。
しかし、私はおそらく問題を間違った方法で見ていると感じており、よりクリーンな設計ソリューションがあるかもしれません. 何かアドバイスはありますか?