1

アクティビティの 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 を別のフラグメントにネストします。

しかし、私はおそらく問題を間違った方法で見ていると感じており、よりクリーンな設計ソリューションがあるかもしれません. 何かアドバイスはありますか?

4

2 に答える 2

0

私が正しく理解していれば、ここに1つの解決策があります:

  1. ActivityA と ActivityBC の 2 つのアクティビティを作成する
  2. ラジオグループで別のフラグメントを作成します
  3. FragmentRadio を ActivityA と ActivityBC の両方に埋め込む
  4. 現在のアクティビティを終了しながら、そのフラグメントに選択に基づいて新しいアクティビティを開始させる
于 2013-05-26T19:49:37.040 に答える