我有一个项目,在这个项目中我需要在两个方向上滑动以启动一个动作。 向左滑动应从特定列表中删除相关项目(不删除原始项目中的项目,因此将其保留在recyclerview数据集中),向右滑动应将有问题的项目添加到另一个列表(又不是原始项目)。 我实现了一个ItemTouchHelperAdapter和一个ItemTouchHelperCallback,我可以检测右/左滑动,但是视图会从屏幕上移开,而我留下一个空白的矩形。有任何想法吗?如何在Android上轻松扫描recyclerview而不关闭
public interface ItemTouchHelperAdapter {
/**
* Called when an item has been dismissed by a swipe.<br/>
* <br/>
* Implementations should call {@link RecyclerView.Adapter#notifyItemRemoved(int)} after
* adjusting the underlying data to reflect this removal.
*
* @param position The position of the item dismissed.
* @see RecyclerView#getAdapterPositionFor(RecyclerView.ViewHolder)
* @see RecyclerView.ViewHolder#getAdapterPosition()
*/
void onItemLeftSwipe(int position);
void onItemRightSwipe(int position);
}
公共类ItemTouchHelperCallback扩展ItemTouchHelper.Callback {
private final ItemTouchHelperAdapter mAdapter;
public ItemTouchHelperCallback(ItemTouchHelperAdapter adapter) {
mAdapter = adapter;
}
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
// int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;
return makeMovementFlags(0, swipeFlags);
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
if (direction == ItemTouchHelper.START)
mAdapter.onItemLeftSwipe(viewHolder.getAdapterPosition());
else if (direction == ItemTouchHelper.END)
mAdapter.onItemRightSwipe(viewHolder.getAdapterPosition());
else
System.out.println("direction: " + direction);
}
@Override
public boolean isLongPressDragEnabled() {
return false;
}
@Override
public boolean isItemViewSwipeEnabled() {
return true;
}
}
,这是在我的适配器类:
@Override
public void onItemLeftSwipe(int position) {
System.out.println("swiped left on " + mDataset.get(position).getName());
}
@Override
public void onItemRightSwipe(int position) {
System.out.println("swiped right on " + mDataset.get(position).getName());
}
可能要参考代码库的代码是从:https://github.com/nemanja-kovacevic/recycler-view- swipe-to-delete/blob/master/app/src/main/java/net/nemanjakovacevic/recyclerviewswipetodelete/MainActivity.java或者反之亦然 –