recyclerview拖拽排序怎么样监听抬起
发布网友
发布时间:2022-04-30 04:31
我来回答
共2个回答
热心网友
时间:2023-10-12 21:38
这要看你要不好获取抬起后被拖拽的ViewHolder的最新位置了,如果不需要则从写ItemTouchHelper.Callback的onSelectedChanged()方法,代码如下:
@Override
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
super.onSelectedChanged(viewHolder, actionState);
switch (actionState) {
case ItemTouchHelper.ACTION_STATE_SWIPE:
//开始删除
break;
case ItemTouchHelper.ACTION_STATE_DRAG:
//开始拖拽
break;
case ItemTouchHelper.ACTION_STATE_IDLE:
//拖拽或删除结束,这时 viewHolder 参数为 null 。
break;
}
}
如果需要则从写ItemTouchHelper.Callback的onSelectedChanged()方法和clearView()方法,代码如下:
private int mLastActionState;
@Override
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
super.onSelectedChanged(viewHolder, actionState);
switch (actionState) {
case ItemTouchHelper.ACTION_STATE_SWIPE://侧滑,将要删除条目。
case ItemTouchHelper.ACTION_STATE_DRAG://拖拽,将要移动条目。
mLastActionState = actionState;
break;
}
}
@Override
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
super.clearView(recyclerView, viewHolder);
switch (mLastActionState) {
case ItemTouchHelper.ACTION_STATE_DRAG:
//拖拽结束
break;
case ItemTouchHelper.ACTION_STATE_SWIPE:
//删除结束
//注意:在这里获取的viewHolder.getLayoutPosition()跟原来的position不一样,有偏差,偏差为1。
break;
}
}
热心网友
时间:2023-10-12 21:38
获取 RecyclerView 的滑动距离: 滑动到一定程度后清零是因为 getChildAt(0) 获得的是第一个可见view 用LinearLayoutManager的recyclerview测试了一下确实如此。 如果LayoutManager用的是LinearLayoutManager 可以用下面的办法,还能向下滑动多