2013-10-18 5 views
37

私は大きな画面用のレイアウトを構築しています。これは、左と右の2つの部分で構成されているはずです。これを行うために、私は2つのフラグメントを使用することが正しい選択だと考えました。Android:いつ/なぜフラグメントの代わりにFrameLayoutを使用する必要がありますか?

次に、マスター/詳細フローを使用してナビゲーションの例を見てきました。 2ペインのレイアウトがあり、右側がナビゲーション、左側が詳細ビューです。

しかし、この例では、詳細ビューでは、Fragmentの代わりにFragmentを直接保持するFrameLayoutがあります。

レイアウト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> 

私の質問は:なぜ詳細ビューのために代わりFragment自体の使用FrameLayoutはありますか?理由や利点は何ですか?私もそれを使うべきですか?

答えて

36

表示されているFragmentFragmentTransactionreplace()メソッドで置き換えられるため、詳細コンテナはFrameLayoutです。

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

+0

これは本当に助けになりました。私の場合、私はフラグメントを置き換える必要はないので、今は 'FrameLayout'をそのまま残し、' Fragment'を直接使うことができます。 – Terry

2

ユーザーインターフェイスの変更に応答する必要がない場合は、<fragment>を使用して、アクティビティにフラグメントを追加します。そうでない場合は、<FrameLayout> を使用します。フレームレイアウトは、画面上の領域をブロックするために使用されるビューグループの一種です。