web-dev-qa-db-ja.com

Android:Fragmentの代わりにFrameLayoutを使用する必要があるのはいつですか?

大画面用のレイアウトを作成しています。これは、左部分と右部分の2つの異なる部分で構成されています。そのためには、2つのフラグメントを使用するのが正しい選択だと思いました。

次に、Master/Detail-Flowを使用したナビゲーションの例を見てみました。これは2ペインレイアウトで、右側がナビゲーション、左側が詳細ビューです。

しかし、その例では、私が期待していたものとは異なり、詳細ビューには、FrameLayoutの代わりにFragmentを直接保持するFragmentがあります。

レイアウトXMLは次のようになります(例)。

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:layout_marginLeft="16dp"
    Android:layout_marginRight="16dp"
    Android:baselineAligned="false"
    Android:divider="?android:attr/dividerHorizontal"
    Android:orientation="horizontal"
    Android:showDividers="middle"
    tools:context=".WorkStationListActivity" >

    <fragment
        Android:id="@+id/workstation_list"
        Android:name="de.tuhh.ipmt.ialp.history.WorkStationListFragment"
        Android:layout_width="0dp"
        Android:layout_height="match_parent"
        Android:layout_weight="1"
        tools:layout="@Android:layout/list_content" />

    <FrameLayout
        Android:id="@+id/workstation_detail_container"
        Android:layout_width="0dp"
        Android:layout_height="match_parent"
        Android:layout_weight="3" />

</LinearLayout>

私の質問は次のとおりです:なぜFrameLayoutの代わりにFragmentが詳細ビューに使用されるのですか?理由または利点は何ですか?私もそれを使うべきですか?

42
Terry

表示されるFrameLayoutFragmentの-​​ replace() メソッドを使用して置き換えられるため、詳細コンテナはFragmentTransactionです。

replace()の最初の引数は、フラグメントが置換されるコンテナのIDです。この例のFrameLayoutがFragmentに置き換えられた場合、WorkStationListFragmentと現在表示されている詳細なFragmentの両方が新しいFragmentに置き換えられます。 FragmentをFrameLayout内にカプセル化することにより、詳細だけを置き換えることができます。

39
Tanis.7x