Aujourd'hui, je vais vous expliquer le contrôle de Fragment, principalement les opérations telles que le changement de vue et le remplacement de page. Il y a aussi comment obtenir l'objet de gestion de Fragment et comment communiquer avec Activity.
1. Gestion des fragments
Pour gérer les fragments dans une activité, vous devez utiliser FragmentManager. Obtenez son instance en appelant getFragmentManager() de l'activité.
• Vous pouvez faire certaines choses. via FragmentManager, notamment : utilisez findFragmentById() (utilisé pour fournir un fragment d'interface utilisateur dans la présentation de l'activité) ou findFragmentByTag() (applicable aux fragments avec ou sans interface utilisateur) pour obtenir le fragment qui existe dans l'activité.
• Supprimez le fragment de la pile arrière à l'aide de popBackStack() (en simulant l'utilisateur appuyant sur la commande BACK).
•Utilisez addOnBackStackChangeListener() pour enregistrer un écouteur pour les modifications dans la pile arrière.
2. Traitement des transactions de fragments
Une fonctionnalité très importante de l'utilisation de fragments dans les activités est : l'ajout, la suppression, le remplacement et l'exécution d'autres actions sur les fragments en fonction de l'interaction de l'utilisateur. Chaque ensemble de modifications soumises à une activité est appelé une transaction et peut être géré à l'aide de l'API dans FragmentTransaction. Nous pouvons également enregistrer chaque transaction dans un backstack géré par activité, permettant à l'utilisateur de revenir en arrière dans les modifications apportées au fragment (de la même manière qu'il reviendrait dans l'activité).
Obtenez une instance FragmentTransaction depuis FragmentManager :
FragmentManager fragmentManager =getFragmentManager(); FragmentTransaction fragmentTransaction =fragmentManager.beginTransaction();
Chaque transaction est un ensemble de modifications à exécuter en même temps. Vous pouvez définir toutes les modifications que vous souhaitez effectuer dans une transaction donnée, à l'aide de méthodes telles que add(), remove() et replace(). Ensuite, pour appliquer la transaction à l'activité, commit() doit être appelé.
Avant d'appeler commit(), vous souhaiterez peut-être appeler addToBackStack() pour ajouter la transaction au backstack d'une transaction fragmentée. Cette back stack est gérée par l'activité et permet à l'utilisateur de revenir à l'état du fragment précédent en appuyant sur le bouton BACK.
//创建修改实例 Fragment newFragment = newExampleFragment(); FragmentTransaction transaction =getFragmentManager().beginTransaction(); // Replace whatever is in thefragment_container view with this fragment, // and add the transaction to the backstack transaction.replace(R.id.fragment_container,newFragment); transaction.addToBackStack(null); //提交修改 transaction.commit();
Ce qui précède explique comment remplacer un fragment par un autre et conserver l'état précédent dans la pile arrière. Dans cet exemple, newFragment remplace le fragment identifié par R.id.fragment_container dans le conteneur de mise en page actuel. En appelant addToBackStack(), la transaction de remplacement est enregistrée dans la pile arrière, afin que l'utilisateur puisse annuler la transaction et ramener le fragment précédent en appuyant sur le bouton BACK.
Si vous ajoutez plusieurs modifications à une transaction (par exemple add() ou remove()) et appelez addToBackStack(), alors toutes les modifications sont appliquées avant d'appeler commit() Les modifications seront ajoutées à la pile arrière en une seule transaction, et appuyer sur le bouton RETOUR les restaurera ensemble. L'ordre dans lequel les modifications sont ajoutées à FragmentTransaction n'est pas important, avec les exceptions suivantes :
• Commit() doit être appelé en dernier
• Si plusieurs fragments sont ajoutés au même conteneur, l'ordre dans lequel ils sont ajoutés détermine leur placement dans la hiérarchie des vues. L'ordre indiqué dans
Lors de l'exécution d'une transaction qui supprime un fragment, si addToBackStack() n'est pas appelé, ce fragment sera détruit lorsque la transaction est validée, et l'utilisateur ne peut pas y revenir. Pour cette raison, lors de la suppression d'un fragment, si addToBackStack() est appelé, le fragment sera arrêté et si l'utilisateur revient en arrière, il reprendra. De plus, pour chaque transaction de fragment, vous pouvez appliquer une animation de transaction en appelant setTransition() avant de valider la transaction.
L'appel de commit() n'exécute pas la transaction immédiatement. Au contraire, il planifie la transaction et, une fois prête, l'exécute sur le thread UI de l'activité (le thread principal). Si nécessaire, cependant, vous pouvez appeler executePendingTransactions() depuis votre thread d'interface utilisateur pour exécuter immédiatement la transaction soumise par commit(). Mais cela n’est généralement pas nécessaire, sauf si la transaction est l’esclave d’une tâche dans un autre thread.
Attention : vous ne pouvez utiliser commit() que pour valider une transaction avant que l'activité n'enregistre son état (lorsque l'utilisateur quitte l'activité).
Communiquer avec l'activité
Bien que Fragment soit implémenté comme un objet Activity indépendant et peut être utilisé dans plusieurs activités, mais une instance de fragment donnée est directement liée à l'activité qui la contient. Des fragments spéciaux peuvent accéder à l'instance d'activité à l'aide de getActivity() et effectuer facilement des tâches telles que rechercher une vue dans la présentation de l'activité. Comme dans le code suivant :
View listView =getActivity().findViewById(R.id.list);
De même, l'activité peut appeler des méthodes dans le fragment en obtenant une référence au Fragment depuis le FragmentManager, en utilisant findFragmentById() ou findFragmentByTag().
ExampleFragment fragment =(ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
4. Résumé
Enfin, je dois parler des exemples de fragments. Les responsables d'Android ont fourni des exemples de démonstration de diverses utilisations de Fragment. La démo de l'API dans notre SDK inclut Fragment pour divers exemples d'utilisation. , si vous avez besoin de voir la démo, regardez simplement le programme API Demo sans avoir à regarder autour de vous. Différentes fonctions sont séparées et différentes classes sont implémentées. Vous pouvez afficher le code spécifique selon vos besoins.