Ce qu'il faut toujours garder à l'esprit lorsqu'on développe des fragments, c'est qu'ils ont besoin d'une interface utilisateur pour pouvoir être affichés. Vous avez besoin d'un endroit dans votre mise en page où vous voulez que le fragment soit. Il y a deux façons de faire cela :
-
Créez une classe de fragments et déclarez-les dans votre mise en page comme ci-dessous.
Nous supposons ici que nous avons créé un fragment ArticleListFragment et un fragment ArticleReaderFragment.
<fragment
android:id="@+id/list"
android:name="com.example.news.ArticleListFragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<fragment
android:id="@+id/viewer"
android:name="com.example.news.ArticleReaderFragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2" />
L'inconvénient de cette méthode est que vous ne pouvez pas la modifier au moment de l'exécution, ce qui signifie que lorsque votre application s'exécute, vous ne pouvez pas remplacer un fragment par un autre. Si vous devez afficher deux fragments par exemple, vous devez en déclarer deux dans votre layout et en cacher un ou l'autre. Heureusement, il existe un autre moyen.
-
Ajout programmé de votre fragment au moment de l'exécution. Dans cette approche, vous devez d'abord déclarer un layout et vous assurer d'ajouter un conteneur (LinearLayout, RelativeLayout, etc.) où vous placerez le fragment. Par exemple :
<ListView
android:id="@id/options_list"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" >
</ListView>
<LinearLayout
android:id="@id/detail_layout"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:orientation="vertical" >
</LinearLayout>
Ici je définis une liste options_list pour vos options et un layout detail_layout où vous devez mettre les détails. Maintenant, au moment de l'exécution, lorsqu'une option est cliquée, vous affichez le fragment de détails sur detail_layout comme suit :
ExampleFragment fragment = new ExampleFragment();
getFragmentManager().beginTransaction().add(R.id.detail_layout, fragment).commit();
Pour remplacer ce fragment par un autre :
Fragment newFragment = new AnotherExampleFragment();
getFragmentManager().beginTransaction().replace(R.id.detail_layout, newFragment).addToBackStack(null).commit();
Remarquez l'appel à addToBackStack. Il est nécessaire pour que, lorsque l'utilisateur appuie sur Retour, la pile précédente s'affiche.
Je pense que vous pouvez le comprendre à partir d'ici. :)