web-dev-qa-db-ja.com

Android RecyclerView ItemTouchHelperはスワイプを元に戻し、ビューホルダーを復元します

スワイプ操作を元に戻してビューホルダーを初期位置に戻す方法はありますかスワイプが完了し、ItemTouchHelper.CallbackインスタンスでonSwipedが呼び出されますか? RecyclerViewItemTouchHelperItemTouchHelper.Callbackのインスタンスが完全に連携するようになりました。スワイプ操作を元に戻し、notでスワイプしたアイテムを削除するだけですある場合。

51
KKB

最新のanndroidXパッケージではまだこの問題があるため、アイテムを正しくリセットするために@ jimmy0251ソリューションを少し調整する必要がありました(このソリューションは最初のスワイプでのみ機能します)。

_ override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
                clipAdapter.notifyItemChanged(viewHolder.adapterPosition)
                itemTouchHelper.startSwipe(viewHolder)
            }
_

startSwipe()は、アイテムの回復アニメーションを正しくリセットすることに注意してください。

1
joecks

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)

0
Carl B

アダプターでnotifyDataSetChangedを呼び出して、スワイプバックの動作を一貫させる

0