【问题标题】:RecyclerView on dropRecyclerView on drop
【发布时间】:2023-03-22 19:04:01
【问题描述】:

我有RecyclerView 拖放功能,但我想在Drop 上做一些计算。当我将expensiveFunction() 放入onMove() 时,它会在每次位置更改时触发,直到拖动结束。这是一个很大的矫枉过正。有没有办法在拖动结束时触发功能?

val itemTouchHelper = ItemTouchHelper(simpleCallback)
itemTouchHelper.attachToRecyclerView(recyclerView)

private var simpleCallback = object : ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP.or(ItemTouchHelper.DOWN), 0) {
    override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
        val startPosition = viewHolder.absoluteAdapterPosition
        val endPosition = target.absoluteAdapterPosition

        Collections.swap(itemList, startPosition, endPosition)
        recyclerView.adapter?.notifyItemMoved(startPosition, endPosition)

        expensiveFunction()

        return true
    }
}

【问题讨论】:

  • 如果自上次触地事件以来有移动,您可以添加触地事件并在那里执行。 setOnTouchListener 和在 onMove 内设置的布尔标志。

标签: android kotlin android-recyclerview itemtouchhelper


【解决方案1】:

您可以覆盖onSelectedChanged(),当ViewHolderItemTouchHelper 滑动或拖动时,它会被调用。

要捕获放置操作,请检查 actionState 值是否为 ItemTouchHelper.ACTION_STATE_IDLE

override fun onSelectedChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) {
    super.onSelectedChanged(viewHolder, actionState)
    when (actionState) {
        // when the item is dropped
        ItemTouchHelper.ACTION_STATE_IDLE -> {
            Log.d(TAG, "Item is dropped")
        }
    }

}

【讨论】:

    猜你喜欢
    • 2018-08-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多