简体   繁体   English

如何使 RecyclerView 的 ItemTouchHelper 仅在列表的一部分上工作(拖放)

[英]How to make the RecyclerView's ItemTouchHelper work on only part of the list(drag & drop)

I use RecyclerView's ItemTouchHelper to change the order(drag & drop),And I want to move only a part of the list.我使用 RecyclerView 的 ItemTouchHelper 来更改顺序(拖放),并且我只想移动列表的一部分。 I don't want to move after a certain index.我不想在某个索引之后移动。 How can I handle it with one RecyclerView?如何使用一个 RecyclerView 处理它?

If I explain a little more about what I want to make, The active items are sorted up and the non-active items are sorted down.如果我对我想要制作的内容进行更多解释,则将活动项目排序,将非活动项目排序。 And only the activated items will shift the order.只有激活的项目才会改变顺序。 Right now, when I drag an active item, it goes down to the area of the non-active item, but I want to prevent it from going down.现在,当我拖动一个活动项目时,它会下降到非活动项目的区域,但我想防止它下降。 How can I do it?我该怎么做?

UPDATE更新

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)
    }

}

Use ItemTouchHelper.SimpleCallback and override getDragDirs and onMove methods:使用ItemTouchHelper.SimpleCallback并覆盖getDragDirsonMove方法:

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
    }
}

Returning 0 on getDragDirs prevents inactive item selection , while returning false on onMove prevents item movement while dragging .getDragDirs上返回0可防止不活动的项目选择,而在onMove上返回false可防止项目在拖动时移动

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用ItemTouchHelper的RecyclerView仅可部分滑动 - RecyclerView with ItemTouchHelper only part swipeable "在 NestedScrollView 中带有 RecyclerView 的 ItemTouchHelper:拖动滚动不起作用" - ItemTouchHelper with RecyclerView in NestedScrollView: Drag scrolling not work RecyclerView拖放 - 使用ItemTouchHelper - 如何在拖动时更快地设置滚动速度? - RecyclerView drag-drop - using ItemTouchHelper - How to set scrolling speed faster while dragging? 如何使用ItemTouchHelper.Callback将项目拖放到水平recyclerview的边界上? - How to drag and drop items over bounds of the horizontal recyclerview with ItemTouchHelper.Callback? 使用 itemtouchhelper、recyclerview 和 Firestore 拖放项目,例如 Google Tasks - Drag & drop items with itemtouchhelper, recyclerview and Firestore like Google Tasks RecyclerView通过itemTouchHelper拖放,拖动时快速拖动 - RecyclerView drag & drop via itemTouchHelper bahaving strange when dragging fast 如何使用ItemTouchHelper和游标实现拖放 - How to implement drag and drop with ItemTouchHelper and cursors RecyclerView ItemTouchHelper 动作拖动开始 - RecyclerView ItemTouchHelper Action Drag Started RecyclerView ItemTouchHelper 动作拖动结束 - RecyclerView ItemTouchHelper Action Drag Ended 拖动时如何在使用 ItemTouchHelper 时取消 RecyclerView 中项目的拖动? - How to cancel dragging of items in RecyclerView when using ItemTouchHelper, as you drag?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM