//移动拖拽 ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() { //同来设置 拖拽移动,或移动删除 @Override public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { int swiped = ItemTouchHelper.RIGHT | ItemTouchHelper.LEFT; int dragFlags = 0; //这里为什么要这么写?因为在 线性布局的时候一般是不需要刻意左右拖动 //所以在这里需要判断一下,是不是网格布局。是的话就可以上下左右一起拖动。 if (recyclerView.getLayoutManager() instanceof GridLayoutManager) { dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.RIGHT | ItemTouchHelper.LEFT; } else { dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; } //第一个参数拖动,第二个删除侧滑 return makeMovementFlags(dragFlags, swiped); } //在拖动中不断的回调这个方法 @Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { int oldPosition = viewHolder.getAdapterPosition(); int newPosition = target.getAdapterPosition(); if (oldPosition < newPosition) { for (int i = oldPosition; i < newPosition; i++) { // 改变实际的数据集 Collections.swap(listData, i, i + 1); } } else { for (int i = oldPosition; i > newPosition; i--) { // 改变实际的数据集 Collections.swap(listData, i, i - 1); } } mAdapter.notifyItemMoved(oldPosition, newPosition); return true; } //处理侧滑 @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { int position = viewHolder.getAdapterPosition(); listData.remove(position); mAdapter.notifyItemRemoved(position); } }); itemTouchHelper.attachToRecyclerView(recycler_view_fenlei_yidong_item);
RecyclerView的拖拽效果
最新推荐文章于 2024-05-08 14:52:01 发布