我想知道你是否可以使用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());
}
}
}`
答案 0 :(得分:2)
这很简单。您可以使用此代码
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()
方法执行您要执行的操作,例如从适配器中删除项目。
希望这会有所帮助。如果您遇到任何问题,请告诉我。
答案 1 :(得分:0)
在CrimeTouchHelper的构造函数中的super方法中设置它。
第二个参数是滑动方向,因此只需传递ItemTouchHelper.RIGHT
即可super(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.RIGHT);
之后,您可以删除' if'签入#onSwiped
您登录#onSwiped时的当前状态不会阻止滑动。假设8是向右滑动的int值,那么你现在正在做的就是阻止适配器移除该项目(但该项目仍然会在视觉上被刷掉)。
答案 2 :(得分:0)
你应该覆盖getMovementFlags方法并在你的customItemTouchHelper.Callback类中将swipe标志设置为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