是否有任何方法可以使用 RecyclerView 停止将项目拖放到特定位置。 我使用以下代码实现了拖放。
val _ithCallback = object : ItemTouchHelper.Callback() {
//and in your implementation of
override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
val fromPosition = viewHolder.adapterPosition
val toPosition = target.adapterPosition
// Video position
if (fromPosition == list.size - 1 || toPosition == list.size - 1) {
return false
}
if (list[fromPosition].trim().isEmpty()){
return false
}
if (fromPosition < toPosition) {
for (i in fromPosition until toPosition) {
Collections.swap(list, i, i + 1)
}
} else {
for (i in fromPosition downTo toPosition + 1) {
Collections.swap(list, i, i - 1)
}
}
adapter?.notifyItemMoved(fromPosition, toPosition)
return true
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
}
//defines the enabled move directions in each state (idle, swiping, dragging).
override fun getMovementFlags(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int {
return makeFlag(ItemTouchHelper.ACTION_STATE_DRAG,
ItemTouchHelper.DOWN or ItemTouchHelper.UP or ItemTouchHelper.START or ItemTouchHelper.END)
}
}
像这样使用它
val ith = ItemTouchHelper(_ithCallback)
ith.attachToRecyclerView(imagesRecyclerView)
最佳答案
最后,在对 ItemTouchHelper 类进行大量研究后,我这样解决了。
我所做的是将标志设置为 ACTION_STATE_IDLE,我想在其中停止拖放。希望它能帮助像我这样的人。
以下是 Kotlin 版本。如果有人在 JAVA 中需要同样的东西,我可以转换它。
//defines the enabled move directions in each state (idle, swiping, dragging).
override fun getMovementFlags(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int {
// The position i want to lock/halt
if (list[viewHolder.adapterPosition].trim().isEmpty()){
return makeFlag(ItemTouchHelper.ACTION_STATE_IDLE, ItemTouchHelper.DOWN or ItemTouchHelper.UP)
}
// The position i want to lock/halt
if (viewHolder.adapterPosition == list.size - 1){
return makeFlag(ItemTouchHelper.ACTION_STATE_IDLE, ItemTouchHelper.DOWN or ItemTouchHelper.UP)
}
// else enabling ACTION_STATE_DRAG
return makeFlag(ItemTouchHelper.ACTION_STATE_DRAG,
ItemTouchHelper.DOWN or ItemTouchHelper.UP or ItemTouchHelper.START or ItemTouchHelper.END)
}
关于android - RecyclerView 中特定位置的拖放暂停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54214843/