web-dev-qa-db-fra.com

Android: quand / pourquoi devrais-je utiliser FrameLayout au lieu de Fragment?

Je construis une disposition pour de grands écrans, qui est censée se composer de 2 parties différentes, une gauche et une droite. Pour ce faire, j'ai pensé que l'utilisation de 2 fragments était le bon choix.

J'ai ensuite regardé l'exemple de la navigation avec le Master/Detail-Flow. Il a une disposition à 2 volets, où à droite est la navigation et à gauche est la vue détaillée.

Mais dans cet exemple, différent de ce que je m'attendais à voir, pour la vue de détail, il y a un FrameLayout qui contient ensuite un Fragment, au lieu d'un Fragment directement.

Le format XML ressemble à ceci (un exemple):

<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>

Ma question est maintenant: pourquoi un FrameLayout est-il utilisé au lieu du Fragment lui-même pour la vue de détail? Quelle est la raison ou l'avantage? Dois-je l'utiliser aussi?

42
Terry

Le conteneur de détails est un FrameLayout car le Fragment qui est affiché sera remplacé à l'aide de la méthode replace() de FragmentTransaction.

Le premier argument de replace() est l'ID du conteneur dont les fragments seront remplacés. Si le FrameLayout dans cet exemple a été remplacé par un Fragment, le WorkStationListFragment et tout détail de fragment actuellement affiché seront remplacés par le nouveau Fragment. En encapsulant le fragment dans un FrameLayout, vous pouvez remplacer uniquement les détails.

39
Tanis.7x