Animation des fragments et de la pile arrière

J'ai du mal à utiliser ou à comprendre comment popping FragmentTransactions hors de la pile arrière gère la coutume animation. Plus précisément, je m'attends à ce qu'il appelle l'animation" out", mais il ne semble pas.

J'ai une méthode simple pour gérer une transaction de fragment (FragmentTransaction) où j'ajoute un fragment et applique une coutume transition de sorte qu'il va fade-in / fade-out. Je suis également d'ajouter ce point à la pile arrière afin que l'utilisateur puisse annuler cette transaction avec le arrière bouton, naviguant essentiellement vers l'état avant le fragment a été ajouté.

protected void changeFragment() { 
    FragmentTransaction ft = fm.beginTransaction(); 
    ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out); 
    ft.add(R.id.fragment_container, new TestFragment()); 
    ft.addToBackStack(null); 
    ft.commit(); 
} 

Tout fonctionne très bien pour aller de l'avant, mais lorsque l'utilisateur clique sur le bouton Retour, les animations de transition ne s'inversent pas. De ce que j'attendais était-ce que lorsque le fragment a été retiré, il utiliserait le fondu animation. Au lieu de cela, il semble sortir (sans animation) et ensuite le conteneur semble fondu. Je ne suis pas sûr que ce soit exactement ce que se passe, mais le fragment est certainement pas la décoloration.

Mon application utilise la bibliothèque de compatibilité pour ajouter le support de fragment, mais je suppose que cela s'applique également à Honeycomb (android-11). Est-ce que quelqu'un sait si je fais juste quelque chose de mal ici ou si je le suis juste attendre trop? Idéalement, je voudrais animer le fragments similaires à la façon dont Gmail (sur le Xoom) fait en ce qui concerne aller de l'avant en cliquant sur un message puis revenir en utilisant le retour bouton. De préférence Ne pas avoir à remplacer le bouton de retour fonctionnalité et suivre mon propre état de fragment puisque je pouvais avoir plusieurs "transactions" dont je voudrais revenir et je suis pas un fan de réinventer les roues.

Également demandé sur le groupe de Développeurs Android: http://groups.google.com/group/android-developers/browse_thread/thread/1136a3a70fa0b6e9

54
demandé sur Programmer Bruce 2011-03-16 18:31:33

3 réponses

Le bug a été corrigé dans la version 3.2 avec l'ajout de l'api:

Http://developer.android.com/reference/android/app/FragmentTransaction.html#setCustomAnimations(int, int, int, int)

Il est à noter qu'il n'a pas encore été porté à la bibliothèque de compatibilité (comme mentionné dans le rapport de bogue).

29
répondu kajham 2011-09-30 20:20:13

J'utilise ceci:

ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out, R.anim.hyperspace_in, R.anim.slide_out);

Et les transitions fonctionnent en sens inverse lorsque le bouton de retour est appuie.

49
répondu CelticParser 2012-06-08 16:13:30

C'est un bug, regardez rapport de bug 15623. L'un des membres du projet Android a commenté que le correctif était trop tard pour la version 3.1, mais il devrait le faire dans la prochaine version.

Le même membre continue à dire que...

Le problème est que Le même les animations sont exécutées sur une opération pop comme ont été courus pour mettre les fragments dans leurs places. Par exemple, dans l'exemple de glissement ci-dessus, sur un opération en avant (poussant l'ancien fragment sur l' empiler et déplacer le nouveau fragment en vue), nous glissons le Vieux fragment du centre à la gauche et faites glisser le nouveau fragment de de la droite vers le centre. Lorsque l' pile est sauté, ces mêmes animations sont exécutés: le fragment le plus récent est animation " out " en le faisant glisser à partir de le droit au centre (après quoi il disparaît, puisqu'il est retiré). Le vieux fragment est sauté hors de la pile et animé de teh centre de la gauche ... le droit au large de la écran.

5
répondu Gallal 2011-07-06 19:43:00