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:
- Cómo cambiar el tipo de vista de un elemento RecyclerView onClick
- ¿Hay alguna manera recomendada de crear un id para un ParseObject para usar en un RecyclerView?
- Recyclerview lag en desplazamiento debido a los anuncios de Admob
- Haga clic en un elemento de la lista RecyclerView
- Elemento RecyclerView que no muestra ondulaciones / retroalimentación táctil cuando el elemento tiene una casilla de verificación
... <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.
- ¿Cuándo recibe el método getItemCount () en el adaptador de RecycleView?
- RecyclerView se desplaza hacia arriba en notifyDataSetChanged en la pantalla de chat
- Recyclerview Adaptador y Glide - misma imagen cada 4-5 filas
- Facebook Anuncios nativos en RycyclerView android
- StaggeredGridLayout desordena al desplazarse hacia arriba
- RealmSearchAdapter no recicla la vista
- RecyclerView Adapter da error "La jerarquía del tipo RecycleAdapter es inconsistente"
- ¿Cómo auto desplazarse hasta Recycler ver en Android?
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 …
- Android: reconstruir ahora requiere nivel de cumplimiento del compilador 5.0 o 6.0. Se encontró '1.7' en su lugar. ¿Por qué eliminar de @Override?
- Deshabilitar haga clic en RecyclerView dentro de un SwipeRefreshLayout