Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Pour faciliter la gestion des fragments, Android fournit la FragmentManager classe . Chaque activité a un instance de Android.App.FragmentManager qui trouvera ou modifiera dynamiquement ses fragments. Chaque ensemble de ces modifications est appelé transaction et est effectué à l’aide de l’une des API contenues dans la classe Android.App.FragmentTransation, qui est gérée par le FragmentManager. Une activité peut démarrer une transaction comme suit :
FragmentTransaction fragmentTx = this.FragmentManager.BeginTransaction();
Ces modifications apportées aux fragments sont effectuées dans le instance à l’aide FragmentTransaction de méthodes telles que Add(), Remove(), et Replace(). Les modifications sont ensuite appliquées à l’aide Commit()de . Les modifications d’une transaction ne sont pas effectuées immédiatement.
Au lieu de cela, ils sont planifiés pour s’exécuter sur le thread d’interface utilisateur de l’activité dès que possible.
L’exemple suivant montre comment ajouter un fragment à un conteneur existant :
// Create a new fragment and a transaction.
FragmentTransaction fragmentTx = this.FragmentManager.BeginTransaction();
DetailsFragment aDifferentDetailsFrag = new DetailsFragment();
// The fragment will have the ID of Resource.Id.fragment_container.
fragmentTx.Add(Resource.Id.fragment_container, aDifferentDetailsFrag);
// Commit the transaction.
fragmentTx.Commit();
Si une transaction est validée après Activity.OnSaveInstanceState() l’appel, une exception est levée. Cela se produit parce que lorsque l’activité enregistre son état, Android enregistre également l’état de tous les fragments hébergés. Si des transactions fragment sont validées après ce point, l’état de ces transactions est perdu lors de la restauration de l’activité.
Il est possible d’enregistrer les transactions de fragments dans la pile arrière de l’activité en effectuant un appel à FragmentTransaction.AddToBackStack(). Cela permet à l’utilisateur de parcourir les modifications de fragments lorsque vous appuyez sur le bouton Précédent . Sans appel à cette méthode, les fragments supprimés seront détruits et ne seront pas disponibles si l’utilisateur revient dans l’activité.
L’exemple suivant montre comment utiliser la AddToBackStack méthode d’un FragmentTransaction pour remplacer un fragment, tout en conservant l’état du premier fragment sur la pile arrière :
// Create a new fragment and a transaction.
FragmentTransaction fragmentTx = this.FragmentManager.BeginTransaction();
DetailsFragment aDifferentDetailsFrag = new DetailsFragment();
// Replace the fragment that is in the View fragment_container (if applicable).
fragmentTx.Replace(Resource.Id.fragment_container, aDifferentDetailsFrag);
// Add the transaction to the back stack.
fragmentTx.AddToBackStack(null);
// Commit the transaction.
fragmentTx.Commit();
Communication avec des fragments
FragmentManager connaît tous les fragments qui sont attachés à une activité et fournit deux méthodes pour faciliter la recherche de ces fragments :
FindFragmentById : cette méthode recherche un fragment en utilisant l’ID spécifié dans le fichier de disposition ou l’ID de conteneur lors de l’ajout du fragment dans le cadre d’une transaction.
FindFragmentByTag : cette méthode permet de rechercher un Fragment qui a une balise fournie dans le fichier de disposition ou qui a été ajoutée dans une transaction.
Fragments et Activities font référence à , FragmentManagerde sorte que les mêmes techniques sont utilisées pour communiquer entre eux. Une application peut trouver un fragment de référence à l’aide de l’une de ces deux méthodes, caster cette référence vers le type approprié, puis appeler directement des méthodes sur le fragment. L’extrait de code suivant fournit un exemple :
Il est également possible pour l’activité d’utiliser le FragmentManager pour rechercher des fragments :
var emailList = FragmentManager.FindFragmentById<EmailListFragment>(Resource.Id.email_list_fragment);
emailList.SomeCustomMethod(parameter1, parameter2);
Communication avec l’activité
Il est possible pour un fragment d’utiliser la Fragment.Activity propriété pour référencer son hôte. En castant l’activité vers un type plus spécifique, il est possible pour une activité d’appeler des méthodes et des propriétés sur son hôte, comme illustré dans l’exemple suivant :
var myActivity = (MyActivity) this.Activity;
myActivity.SomeCustomMethod();