57 votes

Comment créer un nouveau fragment à partir de fragment?

Dans mon application, un a un fragment à l'intérieur de l'activité. Je veux remplacer dynamiquement fragment par l'événement qui s'y trouve.

Par exemple, je clique sur le bouton à l'intérieur de ce fragment, et le fragment est remplacé par un autre. L'activité reste la même.

C'est possible? Et comment faire ça?

56voto

Anup Cowkur Points 11763

de la officiel docs:

"

// Create new fragment and transaction
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();

// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);

// Commit the transaction
transaction.commit();

Dans cet exemple, newFragment remplace tout ce fragment (le cas échéant) est actuellement à la disposition de conteneurs identifiés par l' R.id.fragment_container ID. En appelant addToBackStack(), 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

56voto

alorma Points 184

Si vous ne savez pas comment remplacer l’activité d’appel, c’est facile.

Vous devez lancer getActivity comme suit:

 ((MyActivity) getActivity())
 

Et puis, si vous en avez, vous pouvez appeler une activité in ethod:

 ((MyActivity) getActivity()).replaceFragments(Object... params);
 

Et à l'intérieur de la méthode, vous devriez faire le processus de remplacement de fragment.

30voto

Marcin Orlowski Points 24633

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() ou add() ou remove()):

http://developer.android.com/guide/components/fragments.html

4voto

DroidT Points 544

Comme Marcin l'a dit, vous ne devriez pas avoir un fragment pour démarrer un autre fragment ou une autre activité. Un meilleur moyen de gérer cette situation consiste à créer une implémentation de rappel pour l'activité principale afin de gérer des requêtes telles que le démarrage d'un nouveau fragment. Voici un excellent exemple dans le guide du développeur Android.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X