Android Kotlin:RecyclerView拖拽排序仅在释放时更新Firestore
解决方案
问题出在你把Firestore更新逻辑放在了onMove方法里——这个方法会在拖拽过程中每一次位置变动时都被触发,所以才会频繁调用更新。要实现仅在放下列表项时更新,只需要把更新逻辑移到拖拽操作结束的回调方法里:
- 先把
onMove里的updateFirestoreList()删掉,只保留本地列表和适配器的更新逻辑; - 在
ItemTouchHelper.SimpleCallback中重写clearView方法——这个方法会在用户结束拖拽(松开手指)、视图恢复正常状态时触发,在这里调用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更新调用 return true } override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) { TODO("Not yet implemented") } // 新增clearView方法,在拖拽结束时触发Firestore更新 override fun clearView(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder) { super.clearView(recyclerView, viewHolder) updateFirestoreList() } })
这样修改后,只有当用户完成拖拽并放下列表项时,才会执行Firestore的更新操作,避免了过程中的频繁调用。
内容的提问来源于stack exchange,提问作者Malhar
相关产品推荐
相关产品推荐

