我想知道你是否可以使用itemtouchhelper
来驳回项目,只有当用户向右滑动时?我正在使用这个代码,但方向不起作用
public class CrimeTouchHelper extends ItemTouchHelper.SimpleCallback {
private CrimeAdapter mMovieAdapter;
public CrimeTouchHelper(CrimeAdapter movieAdapter){
super(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT);
this.mMovieAdapter = movieAdapter;
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
//TODO: Not implemented here
return false;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
//Remove item
Log.e("DIRECTION", direction + "");
if(direction == 8) {
mMovieAdapter.remove(viewHolder.getAdapterPosition());
}
}
}`
这很简单
ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new
ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) {
@Override
public boolean onMove(
final RecyclerView recyclerView,
final RecyclerView.ViewHolder viewHolder,
final RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(
final RecyclerView.ViewHolder viewHolder,
final int swipeDir) {
adapter.remove(viewHolder.getAdapterPosition());
}
};
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(
simpleItemTouchCallback
);
itemTouchHelper.attachToRecyclerView(itemsRecyclerView);
您可以将ItemTouchHelper.RIGHT
作为构造函数的第二个参数来传递,该参数实际地接受方向。
使用onSwipe()
方法执行要执行的操作,例如从适配器中删除项。
希望这能有所帮助。如果你遇到任何问题,请告诉我。
在CrimeTouchHelper的构造函数中的超级方法中设置它。
第二个参数是滑动方向,所以只需通过ItemTouchHelper.RIGHT
super(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.RIGHT);
之后,您可以在#onSwipped 中删除"if"复选框
您当前的if签入#onSwiped不会阻止刷卡。假设8是向右滑动的int值,那么您现在所要做的就是阻止适配器移除该项目(但该项目仍将被视觉上滑动)。
您应该覆盖getMovementFlags方法,并在customItemTouchHelper.Callback类中将滑动标志设置为ItemTouchHelper.START
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
// Set movement flags based on the layout manager
if (recyclerView.getLayoutManager() instanceof GridLayoutManager) {
final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
final int swipeFlags = 0;
return makeMovementFlags(dragFlags, swipeFlags);
} else {
final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
final int swipeFlags = ItemTouchHelper.START;
return makeMovementFlags(dragFlags, swipeFlags);
}
}
这将阻止从左向右滑动。要执行相反的方向,请将标志设置为ItemTouchHelper.END