スワイプ操作を元に戻してビューホルダーを初期位置に戻す方法はありますか後スワイプが完了し、ItemTouchHelper.Callback
インスタンスでonSwiped
が呼び出されますか? RecyclerView
、ItemTouchHelper
、ItemTouchHelper.Callback
のインスタンスが完全に連携するようになりました。スワイプ操作を元に戻し、notでスワイプしたアイテムを削除するだけですある場合。
最新のanndroidXパッケージではまだこの問題があるため、アイテムを正しくリセットするために@ jimmy0251ソリューションを少し調整する必要がありました(このソリューションは最初のスワイプでのみ機能します)。
_ override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
clipAdapter.notifyItemChanged(viewHolder.adapterPosition)
itemTouchHelper.startSwipe(viewHolder)
}
_
startSwipe()
は、アイテムの回復アニメーションを正しくリセットすることに注意してください。
LiveData
を使用してListAdapter
にリストを提供する場合、notifyItemChanged
の呼び出しは機能しません。しかし、ItemTouchHelper
コールバックでonSwiped
をリサイクラービューに再アタッチすることを含む、完全な回避策を見つけました
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)
アダプターでnotifyDataSetChangedを呼び出して、スワイプバックの動作を一貫させる