NullPointerException en la animación de dissapearence de RecyclerView desde soporte v.23.2.0

En el nuevo RecyclerView podemos usar wrap_content para la altura (o para el ancho). Así que Google corrigió el error: https://code.google.com/p/android/issues/detail?id=74772
Pero no todo está bien al final.
Trato de usar la animación de la desaparición al quitar el elemento de RecyclerView. Así que utilizo el método de Adapter – notifyItemRemoved (int) con cualquier argumento y RecyclerView causa NullPointerException.

Código Xml:

 ... <RecyclerView android:id="@+id/RecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" android:scrollbars="vertical" android:overScrollMode="always"/> ... 

Registros:

 E/AndroidRuntime: FATAL EXCEPTION: main java.lang.NullPointerException at android.support.v7.widget.SimpleItemAnimator.animateDisappearance(SimpleItemAnimator.java:78) at android.support.v7.widget.RecyclerView.animateDisappearance(RecyclerView.java:3246) at android.support.v7.widget.RecyclerView.access$700(RecyclerView.java:147) at android.support.v7.widget.RecyclerView$4.processDisappeared(RecyclerView.java:422) at android.support.v7.widget.ViewInfoStore.process(ViewInfoStore.java:231) at android.support.v7.widget.RecyclerView.dispatchLayoutStep3(RecyclerView.java:3086) at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2914) at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3277) at android.view.View.layout(View.java:14015) at android.view.ViewGroup.layout(ViewGroup.java:4373) at android.widget.FrameLayout.onLayout(FrameLayout.java:448) at android.view.View.layout(View.java:14015) at android.view.ViewGroup.layout(ViewGroup.java:4373) at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1021) at android.view.View.layout(View.java:14015) at android.view.ViewGroup.layout(ViewGroup.java:4373) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521) at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) at android.view.View.layout(View.java:14015) at android.view.ViewGroup.layout(ViewGroup.java:4373) at android.widget.FrameLayout.onLayout(FrameLayout.java:448) at android.view.View.layout(View.java:14015) at android.view.ViewGroup.layout(ViewGroup.java:4373) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521) at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) at android.view.View.layout(View.java:14015) at android.view.ViewGroup.layout(ViewGroup.java:4373) at android.widget.FrameLayout.onLayout(FrameLayout.java:448) at android.view.View.layout(View.java:14015) at android.view.ViewGroup.layout(ViewGroup.java:4373) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521) at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) at android.view.View.layout(View.java:14015) at android.view.ViewGroup.layout(ViewGroup.java:4373) at android.widget.FrameLayout.onLayout(FrameLayout.java:448) at android.view.View.layout(View.java:14015) at android.view.ViewGroup.layout(ViewGroup.java:4373) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1892) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1711) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) at android.view.Choreographer.doCallbacks(Choreographer.java:562) at android.view.Choreographer.doFrame(Choreographer.java:532) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) at android.os.Handler.handleCallback(Handler.java:725) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5227) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) at dalvik.system.NativeStart.main(Native Method) 

Tal vez hay soluciones temporales de estos problemas?

EDITAR
Traté de reproducir en un nuevo proyecto. Así que no se lanzaron excepciones. Tal vez en mi proyecto hay otras dependencias que llaman a este problema.

Tuve exactamente el mismo error que el planteado en la pregunta y de hecho han planteado un error con Google para esto. Encontré, después de profundizar en el código del marco, que podría resolver el problema cambiando la configuración de HasFixedSize de FALSE a TRUE, es decir, "rv.setHasFixedSize (true)". Esto básicamente le dice al RecyclerView que los cambios en su contenido no cambiarán el tamaño de RecyclerView evitando así un diseño completo. Originalmente había establecido este FALSO debido a una mala interpretación de su significado. Este cambio elimina la falla para mí y es una solución reproducible.

Google ha hecho alguna declaración sobre el uso de RecyclerView con la versión 23.2 de la Biblioteca de Soporte.

Enlace a la entrada del blog (consulte la sección RecyclerView): http://android-developers.blogspot.com.br/2016/02/android-support-library-232.html

Debido a este cambio, asegúrese de revisar los parámetros de diseño de las vistas de elementos: los parámetros de diseño previamente ignorados (como MATCH_PARENT en la dirección de desplazamiento) se respetarán ahora completamente.

Te sugiero que intentes cambiar el layout_height tu RecyclerView a match_parent . Permítanos saber si funciona.

Tengo exactamente la misma excepción. Ocurre cuando agrego una vista al RecyclerView y esa vista está completamente más allá de los límites del RecyclerView (el usuario tendría que desplazarse para ver esa vista recién agregada).

Sin embargo, he notado que esta excepción sólo se produce cuando el ancho o la altura del RecyclerView es wrap_content o 0dp con el peso establecido en 1 dentro de un LinearLayout … Si establezco el ancho y la altura a cualquier otro valor excepto los dos, es decir, 140dp , match_parent , entonces todo funciona bien.

Por lo tanto, he intentado engañar el marco de buggy y encontrar una solución para establecer el ancho de mi RecyclerView a ser tan grande como hay espacio dejado dentro de mi LinearLayout que contiene el RecyclerView (anchura: 0dp, peso: 1 combinación), por lo que Envolví el RecyclerView dentro de otro LinearLayout con el peso establecido en 1 y establecí el ancho de mi RecyclerView en match_parent , por lo que es tan amplio como el que LinearLayout padre puede obtener, y el LinearLayout padre rellena el espacio libre en otro LinearLayout . Y voila, funciona perfectamente!

Lo sé, suena ridículo, pero esa es la forma en que trabajé …

Aquí está el código fuente si alguien necesita para obtener la idea de cómo solucionar este error …

 <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:gravity="center" android:orientation="horizontal"> <LinearLayout android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:orientation="horizontal"> <android.support.v7.widget.RecyclerView android:id="@+id/pic_grid" android:layout_width="match_parent" android:layout_height="140dp" android:background="#BBB"/> </LinearLayout> <Button android:id="@+id/pic_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/pic_button"/> </LinearLayout> 

El RecyclerView ahora es tan amplio como hay espacio libre en el LinearLayout padre, que también contiene un botón a la derecha del RecyclerView , y no se produce ningún fallo.

Si alguien descubre la causa real de tal excepción o una mejor manera de solucionarla, por favor comparta …

  • ¿Recyclerview hace que el último elemento agregado sea el elemento seleccionado?
  • ¿Cómo ajustar correctamente el valor de elevación a recyclerview?
  • Desplácese hasta la parte inferior de recyclerview con varios tipos de vista
  • Android: ¿cómo puedo insertar un RecyclerView dentro de CardView?
  • RecyclerView con GridLayoutManager
  • ¿Hay observadores escritos en RecyclerView.Adapter para saber si el conjunto de datos ha sido cambiado?
  • Obtenga el efecto de ondulación en RecyclerView con elementos que contengan otro color de fondo
  • Recycler View Adapter con EditText
  • FirebaseRecyclerAdapter con 2 referencias de base de datos diferentes - impacto negativo en el desplazamiento
  • Android RecyclerView con volteo de CardView
  • ¿Cuál es la diferencia entre el método swapadapter y el método notifydatasetchanged en la vista Recycler?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.