Pregunta

Tengo problemas para usar o comprender cómo aparecer fragmentos de transacciones de la pila posterior maneja las animaciones personalizadas. Específicamente, espero que llame a la animación "fuera", pero no parece.

Tengo un método simple para manejar una transacción de fragmentos (fragmentTransaction) donde agrego un fragmento y aplico una transición personalizada para que se desvanezca/se desvanezca. También estoy agregando esto a la pila posterior para que el usuario pueda deshacer esa transacción con el botón Atrás, esencialmente navegando al estado antes de agregar el fragmento.

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 el botón Atrás, las animaciones de transición no se revuelven. Lo que esperaba era que cuando se quitara el fragmento, usaría la animación Fade Out. En cambio, 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 está desvaneciendo.

Mi aplicación utiliza la biblioteca de compatibilidad para agregar soporte de fragmentos, pero supongo que esto también es aplicable a HoneyComb (Android-11). ¿Alguien sabe si solo estoy haciendo algo mal aquí o si solo espero demasiado? Idealmente, me gustaría animar los fragmentos de manera similar a cómo lo hace Gmail (en el Xoom) en lo que respecta a avanzar haciendo clic en un mensaje y luego nuevamente usando el botón Atrás. Preferiblemente, no tener que anular la funcionalidad del botón Atrás y mantener el ritmo de mi propio estado de fragmento, ya que podría tener varias "transacciones" de las que me gustaría retroceder y no soy fanático de reinventar ruedas.

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

¿Fue útil?

Solución

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#setcustomations(int, int, int, int)

Cabe señalar que aún no se ha portado a la biblioteca de compatibilidad (como se menciona en el informe de errores).

Otros consejos

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 en reversa cuando se presiona el botón Atrás.

Es un error, mira Informe de errores 15623. Uno de los miembros del proyecto de 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 que ...

El problema es que las mismas animaciones se ejecutan en una operación pop como se ejecuta para poner los fragmentos en sus lugares actuales. Por ejemplo, en el ejemplo deslizante anterior, en una operación hacia adelante (empujando el fragmento antiguo a la pila y moviendo el nuevo fragmento a la vista), deslizamos el fragmento viejo desde el centro a la izquierda y deslizamos el nuevo fragmento desde el Justo al centro. Cuando la pila está explotada, estas mismas animaciones se ejecutan: el fragmento más reciente se anima 'fuera' al deslizarla desde la derecha al centro (después de lo cual desaparece, ya que se está eliminando). El viejo fragmento se quita la pila y se anima desde el centro a la izquierda ... a la derecha de la pantalla.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top