RecyclerView ItemTouchHelper动作拖动结束

key*_*ake 15 android gesture gesturedetector android-recyclerview

当他停止拖放我的RecyclerView时(当他放下所选项目时),我需要听取用户的意见.

我可以通过我的ItemTouchHelper获取此信息吗?

谢谢你的帮助

马克:目前我只是在用户仍然移动项目的时候:)

@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder source, RecyclerView.ViewHolder target) {
    if (source.getItemViewType() != target.getItemViewType()) {
        return false;
    }
    // Notify the adapter of the move
    mAdapter.onItemMove(source.getAdapterPosition(), target.getAdapterPosition());
    return true;
}
Run Code Online (Sandbox Code Playgroud)

cyr*_*xis 24

更新

首先,您可以通过实现来定义可以删除对象的位置 canDropOver

@Override
public boolean canDropOver(RecyclerView recyclerView, RecyclerView.ViewHolder current, RecyclerView.ViewHolder target) {
    return current.getItemViewType() == getItemViewType();
}
Run Code Online (Sandbox Code Playgroud)

更新要使用的适配器,onMove在拖动操作期间可以调用此适配器

@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
    adapter.moveItem(viewHolder.getAdapterPosition(), target.getAdapterPosition());
    return true;
}
Run Code Online (Sandbox Code Playgroud)

要检测与元素的交互何时结束,clearView这是针对任何操作类型(拖动或滑动),即使它成功(项目移动或滑动)或取消(项目未移动或滑动)

@Override
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
    super.clearView(recyclerView, viewHolder);
    // Action finished
}
Run Code Online (Sandbox Code Playgroud)


Cam*_*ino 5

您可以在ItemTouchHelper.Callback()的实现中重写onSelectedChange,例如:

 override fun onSelectedChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) {
        super.onSelectedChanged(viewHolder, actionState)
        when (actionState) {
            ItemTouchHelper.ACTION_STATE_DRAG ->
                Log.d("DragTest","Start to drag: $actionState")
            ItemTouchHelper.ACTION_STATE_SWIPE ->
                Log.d("DragTest","Start to swipe: $actionState")
            ItemTouchHelper.ACTION_STATE_IDLE -> {
                Log.d("DragTest","End action: $actionState")
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)