NotifyDataSetChanged- RecyclerView -¿Es una llamada asincrónica?

Estoy tratando de seguir un conjunto de declaraciones después de la ejecución de notifyDataSetChanged en un recyclerview. Pero cuando estoy depurando mi aplicación, el depurador alcanza las siguientes líneas después de mi notifyDataSetChanged antes de ir al onBindViewHolder del adaptador del recyclerview. Así que mi pregunta es: ¿es notifyDataSetChanged una llamada asíncrona? En caso afirmativo, ¿recibimos una devolución de llamada? PD: Ya he buscado en Google esta respuesta y no pude encontrar una respuesta adecuada, por eso estoy preguntando a la comunidad.

2 Solutions collect form web for “NotifyDataSetChanged- RecyclerView -¿Es una llamada asincrónica?”

RecyclerView autor aquí,

Cuando llama a notifyDataSetChanged , RecyclerView invalida los datos pero no actualiza la interfaz de usuario hasta el siguiente marco de animación. Así es como funciona el sistema de vista de android. Cuando un widget es invalidado (por ejemplo, cambiando sus datos) solicita un diseño que significa que se volverá a medir y volver a establecer en la siguiente vista transversal. Esto se hace para que podamos procesar por lotes todos los cambios hasta la próxima vez que se actualice la pantalla. Es por eso que notifyDataSetChange no onBind instantáneamente un onBind .

Así que sí, puede llamar a esto como una llamada asíncrona, pero eso no significa que usted puede ejecutarlo de múltiples hilos (estos son dos conceptos totalmente diferentes). Todavía tiene que realizar todos los cambios en su adaptador en el subproceso principal. Cuando usted cambia el adaptador, usted tiene que notificar a RecyclerView inmediatamente, que es porqué notifique también tiene que estar en el hilo principal.

La razón de esta limitación es que si el conjunto de datos se cambia durante un diseño, es muy difícil para el gestor de diseño recuperar un estado estable (por ejemplo, imaginar RecyclerView llama a onBind(5) y el elemento 5 se elimina en otro hilo en el Mismo tiempo). También, la contabilidad para tales cambios requerirá mucha sincronización que será una penalización grande del funcionamiento sin ninguÌ n beneficio. Esta es la razón por la cual todos los componentes de interfaz de usuario son de subproceso único.

TLDR : No. Puede llamar a notifyDatasetChanged() sólo desde el subproceso de interfaz de usuario como se indica aquí que realiza los cambios a la interfaz de usuario que sólo se puede hacer en el subproceso principal . Esto hace que la llamada sea sincrónica.

Esta llamada es para redibujar el ui con los elementos modificados. Es como llamar a requestFocus() en una vista.

De la documentación :

RecyclerView intentará sintetizar eventos de cambios estructurales visibles para los adaptadores que informan que tienen IDs estables cuando se utiliza este método. Esto puede ayudar con fines de animación y persistencia de objetos visuales, pero las vistas de elementos individuales todavía tendrán que ser rebotadas y relaídas.

Dado que las vistas se vuelven a dibujar porque el conjunto de datos espera un cambio, debe estar en el subproceso principal de la interfaz de usuario (sólo el looper principal (es decir, el subproceso de interfaz de usuario) puede modificar vistas).

Puede tener varios AdapterObservers que pueden realizar acciones que necesita en el ui.

También de la documentación:

  • Este evento no especifica qué ha cambiado el conjunto de datos, obligando a los observadores a asumir que todos los elementos y estructuras existentes ya no son válidos. * Los LayoutManagers se verán obligados a volver a enlazar ya retransmitir todas las vistas visibles.

El observador predeterminado asumirá que todos los datos han sido cambiados desde el código fuente de la vista Recycler:

  public final void notifyDataSetChanged() { mObservable.notifyChanged(); } 

Es una llamada síncrona que debe ser evitada y utilizada como último recurso .

  • HorizontalGridView / RecyclerLa posición de desplazamiento se restablece una vez que la imagen de Picasso se carga
  • Cómo crear efecto Parallax en Recycler Ver elemento en Scroll?
  • ¿Cómo usar la API fluida de MvvmCross para enlazar TextView de un elemento de RecyclerView a una propiedad de su ViewModel en Android?
  • ¿Cómo desplazar horizontalmente RecyclerView de forma programática?
  • Android java onClick No se pudo ejecutar el método de la actividad
  • Recycler View Con Gridlayout Manager
  • RecyclerView: ¿Cómo simular el selector de dibujo de ListView en la parte superior?
  • RecyclerView con la imagen de fondo en la parte superior
  • Agregar nuevo elemento a la parte superior del RecyclerView
  • AdView adjunto al fondo no me permite ver el último elemento en Recyclerview
  • Transición de actividad de elementos compartidos en android 5
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.