Animar fragmentos y el back stack


Estoy teniendo problemas para usar o entender cómo hacer estallar FragmentTransactions fuera de la pila posterior maneja la costumbre animaciones. Específicamente, espero que llame a la animación "fuera", pero no parece.

Tengo un método simple para manejar una transacción de fragmento (FragmentTransaction) donde agrego un fragmento y aplico un transición para que se desvanezca-in / fade-out. También estoy añadiendo esto a el back stack para que el usuario pueda deshacer esa transacción con el volver botón, esencialmente navegando al estado anterior al fragmento fue añadido.

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(); 
} 

Todo funciona muy bien en el futuro, pero cuando el usuario hace clic en botón atrás, las animaciones de transición no se invierten. Lo que esperaba fue que cuando el fragmento fue removido, usaría el desvanecimiento animación. En su lugar, parece aparecer (sin animación) y luego el contenedor parece desvanecerse. No estoy seguro de que esto sea exactamente lo que está sucediendo, pero el fragmento definitivamente no se desvanece.

Mi aplicación utiliza la biblioteca de compatibilidad para añadir compatibilidad con fragmentos, pero asumo que esto también es aplicable a Honeycomb (android-11). ¿Alguien sabe si sólo estoy haciendo algo mal o si estoy ¿esperando demasiado? Idealmente, me gustaría animar la fragmentos similares a cómo Gmail (en el Xoom) hace en lo que respecta a avanzar haciendo clic en un mensaje y luego volver usando la parte posterior botón. Preferiblemente no tener que anular el botón atrás funcionalidad y mantenerse al día con mi propio estado de fragmento ya que podría tener varias "transacciones" que me gustaría retroceder de y estoy no soy fan de reinventar ruedas.

También se preguntó en el Grupo de Desarrolladores de Android: http://groups.google.com/group/android-developers/browse_thread/thread/1136a3a70fa0b6e9

Author: Programmer Bruce, 2011-03-16

3 answers

El error se solucionó en la versión 3.2 con la adición de la siguiente nueva api:

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

Debe tenerse en cuenta que aún no ha sido portado a la biblioteca de compatibilidad (como se menciona en el informe de error).

 29
Author: kajham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-30 20:20:13

Yo uso esto:

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

Y las transiciones funcionan al revés cuando se presiona el botón atrás.

 49
Author: CelticParser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-08 16:13:30

Es un error, mira informe de error 15623. Uno de los miembros del proyecto Android comentó que la solución era demasiado tarde para la versión 3.1, pero debería llegar a la próxima versión.

El mismo miembro continúa diciendo eso...

El problema es que el mismo las animaciones se ejecutan en una operación pop como se ejecutaron para poner los fragmentos en sus lugares actuales. Por ejemplo, en el ejemplo de deslizamiento anterior, en un operación hacia adelante (empujando el viejo fragmento sobre el apilar y mover el nuevo fragmento a la vista), deslizamos el fragmento viejo fuera del centro a la izquierda y deslice el nuevo fragmento en de la derecha al centro. Cuando el pila se reventó, estas mismas animaciones se ejecutan: el fragmento más reciente es animado 'fuera' deslizándolo desde el derecho al centro (después de lo cual desaparece, ya que está siendo quitar). El fragmento viejo se reventó fuera de la pila y animado de teh centro a la izquierda ... justo al lado pantalla.

 5
Author: Gallal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-06 19:43:00