54 votes

Animation de fragments et de la pile arrière

Je vais avoir du mal à l'utiliser ou à comprendre comment popping FragmentTransactions hors de la pile de retour poignées personnalisées des animations. Plus précisément, j'attends qu'il appelle le "sortir" de l'animation, mais il ne semble pas.

J'ai une méthode simple pour gérer un fragment de la transaction (FragmentTransaction) où j'ai ajouter un fragment et d'appliquer une coutume la transition de sorte qu'il sera fade-in/fade-out. Je suis également d'ajouter ce point à la pile de retour de sorte que l'utilisateur peut annuler la transaction avec l' bouton de retour, essentiellement de la navigation à l'état d'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 aller de l'avant, mais, lorsque l'utilisateur clique sur le bouton de retour, les animations de transition ne sont pas inversées. De ce que j'attendais est que lorsque le fragment est supprimé, il devrait utiliser le fade out de l'animation. Au lieu de cela, il semble sortir (sans animation) et puis le conteneur semble s'estomper. Je ne suis pas sûr que ce soit exactement ce que qui se passe, mais le fragment est certainement pas fondu.

Mon application utilise la bibliothèque de compatibilité pour ajouter fragment de soutien, mais je suppose que ce sera applicable à Honeycomb (android-11). Personne ne sait si je suis en train de faire quelque chose de mal ou si je suis juste attendre trop? Idéalement, je voudrais animer le des fragments de la même façon Gmail (sur la Xoom) n'est en ce qui concerne aller de l'avant en cliquant sur un message, puis de retour en utilisant le dos bouton. De préférence, ne pas avoir à remplacer le bouton de retour la fonctionnalité et la garder jusqu'à mon propre fragment de l'état depuis que j'ai pu avoir plusieurs "opérations", que j'ai envie de revenir en arrière et je suis pas fan de ré-inventer les roues.

Également interrogé sur l'Android Developers Group: http://groups.google.com/group/android-developers/browse_thread/thread/1136a3a70fa0b6e9

49voto

Andaero Points 3319

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 enfoncé.

29voto

kajham Points 669

Le bogue a été corrigé dans la version 3.2 avec l’ajout de la nouvelle api suivante:

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

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

5voto

Gallal Points 2310

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

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

Le problème est que le même des animations sont exécutées sur un pop opération comme ont été exécutés afin de mettre les fragments dans la leurs places. Par exemple, dans le glissement exemple ci-dessus, sur un avant l'opération (en appuyant sur le vieux fragment sur la pile et le déplacement de la nouveau fragment dans la vue), on glisse la ancien fragment du centre de la gauche et faites glisser le nouveau fragment de de la droite vers le centre. Lorsque l' la pile est sortie, ces mêmes animations sont exécutés: le dernier fragment est animation " out " en le faisant glisser à partir de le droit pour le centre (après qui il disparaît, puisqu'il est retiré). L'ancien fragment est sauté en dehors de la pile et d'animation de teh centre de la gauche ... à droite de l'écran.

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