Comment remplacer l'activité du fragment de fragment de lui-même?
Ma demande a un Fragment à l'intérieur de son Activité. Je voudrais par programmation remplacer le fragment par un autre de l'actuelle fragment de lui-même.
Par exemple, si je clique sur un bouton à l'intérieur du fragment, le fragment doit être remplacé par un autre, mais l'activité devrait rester le même.
Est-il possible? Si oui, comment le faire?
- c'est exactement comment framents travail, regardez fragment de la documentation du gestionnaire: remplacer un fragment
- Merci tout le monde, j'ai créé une interface, de remplacer le fragment et le mettre en œuvre dans l'Activité. Toutes les œuvres, FragmentManager œuvres de l'Activité.
Vous devez vous connecter pour publier un commentaire.
Il est effectivement facile d'appeler l'activité de remplacer le fragment.
Vous avez besoin de jeter getActivity():
Ensuite, vous pouvez appeler les méthodes de MyActivity, par exemple:
Bien sûr, cela suppose que vous avez un replaceFragments() la méthode de votre activité qui gère le fragment de remplacer processus.
Edit: @ismailarilik ajouté le code possible de replaceFragments dans ce code avec le premier commentaire ci-dessous qui a été écrit par @silva96:
Le code de replaceFragments pourrait être:
public void replaceFragments(Class fragmentClass) {
Fragment fragment = null;
try {
fragment = (Fragment) fragmentClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
// Insert the fragment by replacing any existing fragment
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit();
}
de l'officiel docs:
Dans cet exemple, newFragment remplace tout ce fragment (le cas échéant) est actuellement dans la mise en page conteneur identifié par le
R.id.fragment_container
ID. En appelantaddToBackStack()
, le remplacement de fragment est enregistré dans la pile de retour de sorte que l'utilisateur peut annuler la transaction et de ramener le fragment précédent en appuyant sur la touche Retour.Le comportement que vous décrivez est exactement ce que les fragments sont conçus pour faire. S'il vous plaît aller à travers le guide officiel pour une compréhension approfondie des fragments qui effacera toutes vos questions.
http://developer.android.com/guide/components/fragments.html
Veuillez noter que le fragment doit PAS remplacer directement lui-même ou des autres fragments. Les Fragments doivent être des entités distinctes. Ce fragment doit faire est de notifier à l'activité de son parent qu'un événement s'est produit. Mais c'est, encore une fois, PAS un fragment de travail de décider quoi faire avec ça! Il convient de l'activité afin de décider, c'est à dire remplacer le fragment sur le téléphone, mais pour ajouter un autre à celui existant sur les tablettes. Donc, vous êtes essentiellement faire quelque chose de mal, de par leur conception.
Et, comme d'autres, déjà mentionné, votre activité doit utiliser FragmentManager ("native" ou de la bibliothèque de compatibilité) pour faire le travail (comme
replace()
ouadd()
ouremove()
):http://developer.android.com/guide/components/fragments.html
Juste que Marcin dit, vous ne devriez pas avoir un fragment de commencer un autre fragment ou d'une activité. Une meilleure façon de gérer cette situation est par la création d'un rappel de mise en œuvre pour l'activité principale de traiter les demandes telles que démarrer un nouveau fragment. Ici est un excellent exemple de l'android developer guide.
Il y a un moyen qui fonctionne; Juste (dans le fragment) procédez de la manière suivante:
Lors de l'utilisation de imbriquée fragments, nous ne voulons pas de chaque intérieur fragment de remplacement va plus à l'extérieur de l'activité. Un mécanisme permettant à un fragment d'informer ses parents qu'il veut changer pour un autre fragment peut être utile.
Voici mon code dans Kotlin, je pense qu'il est facile de traduire en java.
Intérieure fragments nécessité d'étendre
NavigableFragment
, et utilisez le code suivant pour le changement lui-même à un autre fragment.Externe des activités ou des fragments de la nécessité de mettre en œuvre
FragmentNavigator
, et remplacernavigateTo
.Enfin en externe des activités ou des fragments de remplacer
onAttachFragment