我正在使用RecyclerView
和ItemTouchHelper.SimpleCallback
=> onSwiped
方法。回收站视图中的某些项目正在进行中,我想禁用它们的滑动。
我该怎么做?
答案 0 :(得分:4)
您可以在ItemTouchHelper.SimpleCallback
中覆盖getSwipeDirs()。当你不希望一件物品可以刷卡时,返回0。
此方法的第二个参数是正在滑动的项目的ViewHolder-您可以向ViewHolder添加一个简单的标记,以指示它是否可以滑动。
例如:
static class SwipeViewHolder extends RecyclerView.ViewHolder {
public boolean isSwipeable;
public SwipeViewHolder(View itemView) {
super(itemView);
}
}
回调:
static class DragAndSwipeCallback extends ItemTouchHelper.SimpleCallback {
public DragAndSwipeCallback(int dragDirs, int swipeDirs) {
super(dragDirs, swipeDirs);
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
// Perform drag
return false;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
// Remove item
}
@Override
public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
if (viewHolder instanceof SwipeViewHolder
&& ((SwipeViewHolder) viewHolder).isSwipeable) {
return super.getSwipeDirs(recyclerView, viewHolder);
} else {
return 0;
}
}
}
答案 1 :(得分:0)
在我的情况下,我注意到getSwipeDirs()没有被调用,可能是因为我也设置了MovementFlags。
我也必须覆盖getMovementFlags(),如下:
@Override
public int getMovementFlags(RecyclerView recyclerView,
RecyclerView.ViewHolder viewHolder) {
if (viewHolder instanceof SwipeViewHolder
&& ((SwipeViewHolder) viewHolder).isSwipeable) {
return makeMovementFlags(0, super.getSwipeDirs(recyclerView, viewHolder));
} else {
return makeMovementFlags(0, 0);
}
}