【问题标题】:Drag Drop halt for Specific Position in RecyclerView在 RecyclerView 中的特定位置拖放停止
【发布时间】:2019-06-10 09:48:27
【问题描述】:

有没有什么方法可以使用 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)

【问题讨论】:

    标签: android kotlin android-recyclerview drag-and-drop


    【解决方案1】:

    最后,经过对 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)
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-04
      • 1970-01-01
      • 2017-07-01
      相关资源
      最近更新 更多