RecyclerView: implementa correctamente la eliminación de SnackBar UNDO (Kotlin)

Implementé con éxito el deslizamiento para eliminar un elemento del recyclerView.

Cuando se elimina un elemento, quiero que Top muestre un SnackBar con un button que te permite volver a agregar el artículo si lo borraste involuntariamente.

Elegí almacenar el elemento modificado en una variable y eliminarlo.

Luego, si el usuario presiona el button Deshacer, se volverá a agregar a la position que solía tener.

Así es como lo hice:

override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) { val position = viewHolder.adapterPosition //get position which is swipe if (direction == ItemTouchHelper.LEFT) { //if swipe left val tmp = activeSubs[position] //here I store the temporary Item activeSubs.removeAt(position) adapter!!.removeItem(position) //TODO: translate val layout = find<View>(R.id.active_subs_recycler) Snackbar.make(layout, "Subscription Deleted", Snackbar.LENGTH_LONG) .setAction("Undo", { _ -> activeSubs.add(position-1, tmp) adapter!!.notifyItemInserted(position-1) adapter!!.notifyDataSetChanged() }).show() } } 

El problema es que cuando hago clic en el button DESHACER, el artículo no se vuelve a agregar en el recyclerView . ¿Qué estoy haciendo mal?

Tienes un método de adaptador remove item

 adapter!!.removeItem(position) 

eso es eliminar el elemento de la list del adaptador y notificar a la vista del reciclador.

El método de deshacer, sin embargo, no usa la list de adaptadores tal como lo señala @Submerged, intente crear un método equivalente

 adapter!!.addItem(position) 

ya que actualmente está agregando el elemento a un object de list diferente, y no al que utiliza el adaptador, por lo que no se actualiza nada.

PS llama a notifyItemInserted (para una animation) o notifyDataSetChanged (un cambio de datos por lotes, sin animation), no a ambos

  • De la documentation de kotlin no está claro para mí el operador como
  • Selecciones no deseadas en RecyclerView
  • Recycler View no se desplaza suavemente
  • Cómo extender desde una InnerClass en kotlin
  • Extensión de Kotlin no reconocida en el adaptador
  • Android Recycler View Horizontal Desplácese hasta el último elemento y muestre el primer elemento
  • ¿Cómo cambiar el color de background de una vista de carta cuando se selecciona?
  • java.lang.IllegalStateException: TextView no debe ser nulo (Android / Kotlin)
  • Cargando la image a la position correcta en la vista de reciclador
  • Cómo proteger el oyente de desplazamiento sin fin de un reciclador
  • RecyclerView.ViewHolder no se vincula correctamente