Existe-t-il un moyen de rétablir une action de balayage et de restaurer le support de vue à sa position initiale après le balayage est terminé et onSwiped
est appelé sur le ItemTouchHelper.Callback
exemple? J'ai obtenu les RecyclerView
, ItemTouchHelper
et ItemTouchHelper.Callback
instances pour fonctionner parfaitement ensemble, j'ai juste besoin d'annuler l'action de glissement et pas de supprimer l'élément glissé dans certains cas.
Avec les derniers packages anndroidX, j'ai toujours ce problème, j'ai donc dû ajuster un peu la solution @ jimmy0251 pour réinitialiser correctement l'élément (sa solution ne fonctionnerait que pour le premier balayage).
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
clipAdapter.notifyItemChanged(viewHolder.adapterPosition)
itemTouchHelper.startSwipe(viewHolder)
}
Notez que startSwipe()
réinitialise correctement les animations de récupération de l'élément.
Dans le cas de l'utilisation de LiveData
pour fournir une liste à un ListAdapter
, l'appel de notifyItemChanged
ne fonctionne pas. Cependant, j'ai trouvé une solution de contournement qui implique de rattacher le ItemTouchHelper
à la vue du recycleur dans le rappel onSwiped
en tant que tel
val recyclerView = someRecyclerViewInYourCode
var itemTouchHelper: ItemTouchHelper? = null
val itemTouchCallback = object : ItemTouchHelper.Callback {
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction:Int) {
itemTouchHelper?.attachToRecyclerView(null)
itemTouchHelper?.attachToRecyclerView(recyclerView)
}
}
itemTouchHelper = ItemTouchHelper(itemTouchCallback)
itemTouchHelper.attachToRecyclerView(recyclerView)
Appelez notifyDataSetChanged sur votre adaptateur pour rendre le travail de balayage en arrière cohérent