EnterTransitionCoordinator causa NPE en Android 5.0
Después de agregar salidas e ingresar transiciones de actividad a una aplicación, estoy recibiendo informes de fallo como los siguientes:
Excepción Fatal: java.lang.NullPointerException: Intenta invocar el método virtual 'android.view.ViewParent android.view.View.getParent ()' en una referencia de objeto nulo en android.view.ViewOverlay $ OverlayViewGroup.add (ViewOverlay.java: 164) en android.view.ViewGroupOverlay.add (ViewGroupOverlay.java:63) en android.app.EnterTransitionCoordinator.startRejectedAnimations (EnterTransitionCoordinator.java:598) en android.app.EnterTransitionCoordinator.startSharedElementTransition (EnterTransitionCoordinator.java:325) en android. App.EnterTransitionCoordinator.access $ 200 (EnterTransitionCoordinator.java:42) en android.app.EnterTransitionCoordinator $ 5 $ 1.run (EnterTransitionCoordinator.java:389) en android.app.ActivityTransitionCoordinator.startTransition (ActivityTransitionCoordinator.java:698) en android.app. EnterTransitionCoordinator $ 5.onPreDraw (EnterTransitionCoordinator.java:386) en android.view.ViewTreeObserver.dispatchOnPreDraw (ViewTreeObserver.java:847) en android.view.ViewRootImpl.performTraversa Ls (ViewRootImpl.java:1985) en android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1077) en android.view.ViewRootImpl $ TraversalRunnable.run (ViewRootImpl.java:5845) en android.view.Choreographer $ CallbackRecord.run (Choreographer.java:767) en android.view.Choreographer.doCallbacks (Choreographer.java:580) en android.view.Choreographer.doFrame (Choreographer.java:550) en android.view.Choreographer $ FrameDisplayEventReceiver.run (coreógrafo. Java: 753) en android.os.Handler.handleCallback (Handler.java:739) en android.os.Handler.dispatchMessage (Handler.java:95) en android.os.Looper.loop (Looper.java:135) at Android.app.ActivityThread.main (ActivityThread.java:5272) en java.lang.reflect.Method.invoke (Method.java) en java.lang.reflect.Method.invoke (Method.java:372) en com.android .internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:909) en com.android.internal.os.ZygoteInit.main (ZygoteInit.java:704)
- Imagen de diapositiva suave de una sola manera
- Transición del elemento de la lista para expandirse en detalles como Google Inbox
- Elemento compartido La transición no funciona en la primera carga con Picasso
- `SetEnterTransition` sólo funciona con` ActivityCompat.startActivity`
- Elementos compartidos y transiciones de contenido en Fragmentos
No es reproducible, pero el conteo de fallos es significativo.
Al hacer algunas investigaciones, me encontré con este commit sugiriendo que es (en realidad fue) un error interno en Android: https://android.googlesource.com/platform/frameworks/base/+/83c692efd3c53050fce132dfd2ef21763d3cf010%5E%21/#F0
Todos los informes de fallo son 5.0, 5.0.1 o 5.0.2. Debido a que 5.1 tiene una propagación más amplia, pero no muestra bloqueos, parece que EnterTransitionCoordinator se corrigió en 5.1.
Por lo tanto, una posible solución sería comprobar la API nivel 22 o superior, y sólo hacer las transiciones entonces. Sin embargo me pregunto si hay una mejor manera; Alguna solución quizás, a pesar de esto parece ser una cuestión interna de Android (todas las clases del sistema en la pila)?
- ¿Cómo recibir una notificación cuando una transición entre actividades haya terminado?
- ¿Alguien sabe cómo usar onActivityReenter correctamente?
- OnEnterAnimationComplete () no se llama después de una transacción de actividad
- Fragmento Transacciones con transición - Los nombres de transición únicos son necesarios
- ¿Crear una transición Fragment como la aplicación Contactos?
- TansitionDrawable primer elemento no desaparece
- Barra de navegación de desbordamiento de elementos compartidos en la animación de transición
- FragmentTransaction.replace () transición de fade-in muestra el fragmento "fantasma"
Después de requerir el nivel API 22 (Android 5.1) para la transición, los bloqueos han desaparecido. Esta es la solución más sencilla. Si necesitas apoyar esto con Android 5.0, comprueba la respuesta de Nikola (no lo probamos nosotros mismos para evitar el código adicional).
Para menor que API que 5.1, posponga la transición de elementos compartidos usando postponeEnterTransition()
. Registre un listener OnDrawListener
en ViewTreeObserver
de la vista de decoración (quizás) o de contenido ( android.R.id.content
) e inicie la transición una vez que onDraw()
se llame. No olvide cancelar el registro del oyente, una vez que inicie la transición.
Este error del SO para Android se relaciona con el manejo de elementos "rechazados" durante la transición del elemento compartido. Un elemento compartido será rechazado (excluido de la transición) si no está conectado a la ventana, lo que podría suceder porque su visibilidad se establece en GONE
.
La solución que estoy usando es comprobar cada posible vista de elementos compartidos antes de llamar a makeSceneTransitionAnimation()
, e incluirla sólo en la lista si su visibilidad está establecida en VISIBLE
.
- RxJavaPlugins Error No encontró la clase "com.google.devtools.build.android.desugar.runtime.ThrowableExtension"
- ¿Cuáles son las buenas maneras (existentes) de transmitir datos a múltiples teléfonos móviles sin Internet?