{{tag>android}}
====== La classe Fragment ======
* [[https://developer.android.com/guide/components/fragments.html|Guide de développement]]
* [[https://developer.android.com/reference/android/support/v4/app/Fragment.html|Documentation de la classe]]
===== Construire =====
==== Ajouter / Supprimer avec XML ====
Ajout d'un fragment à une activité
Avantage : simple à mettre en œuvre
Inconvénient : impossible de supprimer le fragment. Dans le cas où on souhaite basculer d'un fragment vers l'autre, il est préférable d'implémenter [[fragment#Ajouter / Supprimer au runtime|FragmentManager]]
[[https://developer.android.com/training/basics/fragments/creating.html|source]]
L'activité implémente alors ce layout
public class MainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.news_articles);
}
}
==== Ajouter / Supprimer au runtime ====
Utilise [[https://developer.android.com/reference/android/support/v4/app/FragmentManager.html|FragmentManager]]
=== Principe ===
Utiliser le FragmentManager pour créer une [[https://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html|FragmentTransaction]]
=== Séquence ===
* bonne pratique : ajouter le fragment initial lors l'appel à onCreate() de l'activité
* obligatoire : créer une vue qui servira de conteneur pour les fragments
* Ajouter le fragment
setContentView(R.layout.fragment_layout);
// Check that the activity is using the layout version with
// the fragment_container FrameLayout
if (findViewById(R.id.fragment_container) != null) {
// Being restored from a previous state ? do nothing to avoir overlapping
if (savedInstanceState != null)
return;
// Create an instance of ExampleFragment
HeadlinesFragment firstFragment = new HeadlinesFragment();
// In case this activity was started with special instructions from an Intent,
// pass the Intent's extras to the fragment as arguments
firstFragment.setArguments(getIntent().getExtras());
// Add the fragment to the 'fragment_container' FrameLayout
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, firstFragment).commit();
}