我有一个recycler视图,它的列表存储在firestore中。我想让用户使用拖放重新排序的项目。当用户删除hold(放下项目)时,我想调用函数来更新firestore,但每当位置改变时,即使拖动到所需的位置,函数也会被调用。如何仅在放置物品时调用函数。
val itemTouchHelper = ItemTouchHelper(
object: ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP or ItemTouchHelper.DOWN, 0){
override fun onMove(
recyclerView: RecyclerView,
source: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder
): Boolean {
val sourcePosition = source.adapterPosition
val targetPosition = target.adapterPosition
Collections.swap(itemList, sourcePosition, targetPosition)
adapter.notifyItemMoved(sourcePosition, targetPosition)
// Firestore update
updateFirestoreList()
return true
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
TODO("Not yet implemented")
}
})
字符串
2条答案
按热度按时间atmip9wb1#
当您选择拖动时,存储此位置
字符串
当你放下
clearView
将被调用,获取ViewHolder的位置并交换Collection型
希望对你有帮助:))
w51jfk4q2#
我实现它的方法是重写
ItemTouchHelper
的clearView()
方法,并从该方法调用回调。其内容如下:字符串
onItemMovied(from, to)
是MyListAdapter
类中的一个函数,它的实现如下所示:型
它只是用新项目的位置更新列表(您可能有不同的方法,可以根据需要随意使用它,也可以根本不使用它)。@ vietohoang implementation for updating the list itself seems more efficient.我的天啊!我建议你试一下。
最后,在附加
MyTouchHelper
的地方,可以使用它的回调来调用特定的函数,如下所示:型
我希望能帮上忙。