有時候會遇到在刪除RecyclerView需要做點的效果的時候,這時候便能使用ItemTouchHelper來達成各式滑動效果,通過使用它可以讓RecyclerView的使用更加生動,下面開始說明ItemTouchHelper使用的步驟。
ItemTouchHelper下有很多方法,所以在使用ItemTouchHelper可以先創建一個callBack來將需要的方法拿出來,這邊取得滑動與移動的方法。
public class RecyclerViewTouchHelper extends ItemTouchHelper.Callback {
private final ItemTouchHelperCallBack itemTouchHelperCallBack;
public RecyclerViewTouchHelper(ItemTouchHelperCallBack callBack) {
this.itemTouchHelperCallBack = callBack;
}
@Override
public boolean isItemViewSwipeEnabled() {
return super.isItemViewSwipeEnabled();
}
//控制移動
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
itemTouchHelperCallBack.onMove(viewHolder.getAdapterPosition(),target.getAdapterPosition());
return true;
}
//控制滑動
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
itemTouchHelperCallBack.onDelete(viewHolder.getAdapterPosition());
}
@Override
public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
return 0;
}
public interface ItemTouchHelperCallBack {
void onDelete(int positon);
void onMove(int fromPosition, int toPosition);
}
}
完成後通過以下設置便能將ItemTouchHelper套入我們的RecyclerView。
mRecyclerView.setLayoutManager(layoutManager);
ItemTouchHelper.Callback callback=new RecyclerViewTouchHelper(mAdapter);
ItemTouchHelper itemTouchHelper=new ItemTouchHelper(callback);
itemTouchHelper.attachToRecyclerView(mRecyclerView);
mRecyclerView.setAdapter(mAdapter);
最後在Adapter去實作RecyclerViewTouchHelper.ItemTouchHelperCallBack便能在Adapter下控制在move、swpie時要做的動作,通過先前傳回的positon便能知道當下在操作的item的位置,如此便能對該position做操作達到我們要的效果。