recyclerview notifyitemremoved current android android-recyclerview

android - current - notifyitemremoved



RecyclerView.ViewHolder-getLayoutPosition vs getAdapterPosition (1)

Esta es una situación difícil, lo siento, los documentos no son suficientes.

Cuando el contenido del adaptador cambia (y usted llama, notify***() ) RecyclerView solicita un nuevo diseño. Desde ese momento, hasta que el sistema de diseño decida calcular un nuevo diseño (<16 ms), la posición del diseño y la posición del adaptador pueden no coincidir porque el diseño aún no ha reflejado los cambios del adaptador.

En su caso de uso, dado que sus datos están relacionados con el contenido de su adaptador (y supongo que los datos se cambian al mismo tiempo con los cambios del adaptador), debería usar adapterPosition .

Sin embargo, tenga cuidado, si está llamando a notifyDataSetChanged() , ya que invalida todo, RecyclerView no sabe la posición del adaptador de ViewHolder hasta que se calcule el siguiente diseño. En ese caso, getAdapterPosition() devolverá RecyclerView#NO_POSITION ( -1 ).

Pero digamos que si ha llamado a notifyItemInserted(0) , getAdapterPosition() de ViewHolder que estaba anteriormente en la posición 0 comenzará a devolver 1 inmediatamente. Por lo tanto, siempre que envíe eventos de notificación granulares, siempre estará en buen estado (conocemos la posición del adaptador aunque el nuevo diseño aún no se haya calculado).

Otro ejemplo, si está haciendo algo al hacer clic en el usuario, si getAdapterPosition() devuelve NO_POSITION , es mejor ignorar ese clic porque no sabe en qué usuario hizo clic (a menos que tenga algún otro mecanismo, por ejemplo, identificadores estables para buscar el elemento )

Editar para cuando la posición de diseño es buena

Digamos que está utilizando LinearLayoutManager y desea acceder al ViewHolder sobre el elemento en el que se hace clic actualmente. En ese caso, debe usar la posición de diseño para obtener el elemento anterior.

mRecyclerView.findViewHolderForLayoutPosition(myViewHolder.getLayoutPosition() - 1)

Debe usar la posición de diseño porque coincide con lo que el usuario está viendo actualmente en la pantalla.

Desde la nueva versión de la biblioteca de soporte (22.x), el método getPosition() de la clase RecyclerView.ViewHolder ha quedado en desuso en lugar de los métodos mencionados en el tema. Realmente no entiendo la diferencia de leer los documentos. ¿Alguien podría explicar la diferencia en términos simples?

Tengo el siguiente caso de uso: le doy a mi adaptador una List , y también quiero poder asociar información adicional para cada elemento de la lista. Tengo un mapeo de posición a extra, y el mapeo está disponible para los titulares para que puedan obtener el extra para su posición y hacer cosas con él. En el titular, ¿qué método debo usar?

¿Qué sucede con las posiciones de los titulares cuando los elementos de la lista en los índices 0 y 1 se cambian de lugar? ¿Qué devuelven los métodos?