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