RecyclerView ItemTouchHelper 操作拖动结束
RecyclerView ItemTouchHelper Action Drag Ended
当用户停止在我的 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;
}
已更新
首先,您可以通过实现 canDropOver
来定义可以放置对象的位置
@Override
public boolean canDropOver(RecyclerView recyclerView, RecyclerView.ViewHolder current, RecyclerView.ViewHolder target) {
return current.getItemViewType() == getItemViewType();
}
更新您要使用的适配器onMove
这可以在拖动操作期间调用多个
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
adapter.moveItem(viewHolder.getAdapterPosition(), target.getAdapterPosition());
return true;
}
检测与元素的交互何时结束实施 clearView
这适用于任何操作类型(拖动或滑动),即使它成功(项目移动或滑动)或被取消(项目未移动或滑动)
@Override
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
super.clearView(recyclerView, viewHolder);
// Action finished
}
您可以在 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")
}
}
}
当用户停止在我的 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;
}
已更新
首先,您可以通过实现 canDropOver
@Override
public boolean canDropOver(RecyclerView recyclerView, RecyclerView.ViewHolder current, RecyclerView.ViewHolder target) {
return current.getItemViewType() == getItemViewType();
}
更新您要使用的适配器onMove
这可以在拖动操作期间调用多个
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
adapter.moveItem(viewHolder.getAdapterPosition(), target.getAdapterPosition());
return true;
}
检测与元素的交互何时结束实施 clearView
这适用于任何操作类型(拖动或滑动),即使它成功(项目移动或滑动)或被取消(项目未移动或滑动)
@Override
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
super.clearView(recyclerView, viewHolder);
// Action finished
}
您可以在 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")
}
}
}