6

私は、マスター/詳細フォームのようなフラグメントを利用するAndroidアプリケーションを開発しています。メインアクティビティを左側のリストフラグメントで構成し、左側で選択したアイテムに基づいて、右側に異なるレイアウトのフラグメントを表示したいと思います。(注:右側の各フラグメントには、異なるレイアウト/ビューが必要です)

私が出くわしたすべての例では、右側の1つの一般的なフラグメントのみを使用して、値を変更したり、同じレイアウトの新しいフラグメントを交換/置換したりしています。

誰かがこの問題に光を当てることができれば、それは私を大いに助けてくれるでしょう。ありがとう!

4

1 に答える 1

9

フレームレイアウトを使用してフラグメントを保持している場合、それはあなたが言及している他のものと同じです。フラグメント(レイアウトに関係なく)をインスタンス化し、他のフラグメントの代わりにフレームレイアウトにスワップするだけです。

フラグメントをXMLにハードコーディングしている場合、それを行うことはできません(私が判断できる限り)。

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/frames"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_above="@id/hline1"
    android:layout_below="@id/horizontalline"
    android:orientation="horizontal" >
    <FrameLayout
        android:id="@+id/leftpane"
        android:layout_width="0px"
        android:layout_height="match_parent"
        android:layout_weight=".4" />
    <TextView
        android:id="@+id/verticalline"
        android:layout_width="2dp"
        android:layout_height="match_parent"
        android:background="@color/bar_background"
        android:gravity="center_horizontal"
        android:paddingLeft="5dip"
        android:paddingRight="5dip" />
    <FrameLayout
        android:id="@+id/rightpane"
        android:layout_width="0px"
        android:layout_height="match_parent"
        android:layout_weight="1" >
    </FrameLayout>
</LinearLayout>

次に、フレームレイアウトのIDとインスタンス化されたフラグメントの名前を使用して、フラグメントをフレームレイアウトに配置します。

EventListFragment eventlist = new EventListFragment();
getFragmentManager().beginTransaction().replace(R.id.leftpane, eventlist).commit();

EventDetailFragment eventadd = new EventDetailFragment();
getFragmentManager().beginTransaction().replace(R.id.rightpane, eventadd).commit();

内容を変更したい場合は、同じことをもう一度行います(以下では、右側のペインのフラグメントを、独自の異なるレイアウトを関連付けることができる新しい/異なるフラグメントに置き換えます)。

EventSuperDetailFragment eventsuper = new EventSuperDetailFragment();
getFragmentManager().beginTransaction().replace(R.id.rightpane, eventsuper).commit();
于 2012-08-03T00:41:56.133 に答える