/ / Android: quand / pourquoi devrais-je utiliser FrameLayout au lieu de Fragment? - android, android-fragments, framelayout

Android: quand / pourquoi devrais-je utiliser FrameLayout au lieu de Fragment? - android, android-fragments, framelayout

Je construis une mise en page pour grands écrans, qui est supposée être composée de 2 parties différentes, une gauche et une droite. Pour ce faire, je pensais que l’utilisation de 2 fragments était le bon choix.

Ensuite, j’ai jeté un coup d’œil sur l’exemple de la navigation avec le Flux maître / détail. Il comporte une disposition en deux volets: à droite, la navigation, à gauche, la vue de détail.

Mais dans cet exemple, différent de ce que je pensais voir, pour la vue de détail, il y a une FrameLayout qui détient alors un Fragment, au lieu d'une Fragment directement.

La mise en page 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 la suivante: pourquoi un FrameLayout utilisé à la place du Fragment lui-même pour la vue de détail? Quelle est la raison ou l'avantage? Devrais-je l'utiliser aussi?

Réponses:

36 pour la réponse № 1

Le conteneur de détail est un FrameLayout parce que le Fragment qui est affiché sera remplacé en utilisant FragmentTransaction"s replace() méthode.

Le premier argument à replace() est l'ID du conteneur dont les fragments seront remplacés. Si, dans cet exemple, FrameLayout était remplacé par un fragment, les deux WorkStationListFragment et quel que soit le détail actuellement affiché, le fragment serait remplacé par le nouveau fragment. En encapsulant le fragment dans un FrameLayout, vous pouvez remplacer uniquement les détails.