{{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(); }