如何解决如何使 RecyclerView 的 ItemTouchHelper 仅作用于列表的一部分拖放
我使用 RecyclerView 的 itemtouchhelper 来更改顺序(拖放),而且我只想移动列表的一部分。 我不想在某个索引之后移动。我如何用一个 RecyclerView 处理它?
如果我再解释一下我想做什么, 活动项目按顺序排列,非活动项目按顺序排列。并且只有激活的项目才会改变顺序。 现在,当我拖动一个活动项目时,它会下降到非活动项目的区域,但我想防止它下降。我该怎么做?
更新
open class SimpleitemtouchhelperCallback(private val mAdapter: itemtouchhelperAdapter) :
itemtouchhelper.Callback() {
private var isLongPressDrag = true
fun setLongPressDragEnable(isLongPressDrag: Boolean) {
this.isLongPressDrag = isLongPressDrag
}
override fun isLongPressDragEnabled() = isLongPressDrag
override fun getMovementFlags(
recyclerView: RecyclerView,viewHolder: RecyclerView.ViewHolder
): Int {
val dragFlags = itemtouchhelper.UP or itemtouchhelper.DOWN
val swipeFlags = 0
return makeMovementFlags(dragFlags,swipeFlags)
}
override fun onMove(
recyclerView: RecyclerView,viewHolder: RecyclerView.ViewHolder,target: RecyclerView.ViewHolder
): Boolean {
return mAdapter.onItemmove(viewHolder.adapterPosition,target.adapterPosition)
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder,i: Int) {
mAdapter.onItemdismiss(viewHolder.adapterPosition)
}
}
解决方法
使用 ItemTouchHelper.SimpleCallback
并覆盖 getDragDirs
和 onMove
方法:
ItemTouchHelper.SimpleCallback(
UP or DOWN,0
) {
override fun getDragDirs(recyclerView: RecyclerView,viewHolder: RecyclerView.ViewHolder): Int {
val selectedPosition = viewHolder.adapterPosition
val isActive: Boolean = // retrieve your model from list and check its active state
return if (isActive) super.getDragDirs(recyclerView,viewHolder) else 0
}
override fun onMove(
recyclerView: RecyclerView,viewHolder: RecyclerView.ViewHolder,target: RecyclerView.ViewHolder,): Boolean {
val toPosition = target.adapterPosition
val isActiveTarget: Boolean = // retrieve your target model from list and check its active state
if (!isActiveTarget) return false
val fromPosition = viewHolder.adapterPosition
moveItem(fromPosition,toPosition)
return true
}
}
在 0
上返回 getDragDirs
可防止不活动的项目选择,而在 false
上返回 onMove
可防止项目在拖动时移动强>.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。