RecyclerView實現拖拽及滑動
阿新 • • 發佈:2019-01-09
網上關於Recycleview實現拖拽的文章很多,在這就不做過多描述,直接上程式碼:
mItemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() { /** * 是否處理滑動事件 以及拖拽和滑動的方向 如果是列表型別的RecyclerView的只存在UP和DOWN,如果是網格類RecyclerView則還應該多有LEFT和RIGHT * @param recyclerView * @param viewHolder * @return */ @Override public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { 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 = 0; return makeMovementFlags(dragFlags, swipeFlags); } } @Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { //得到當拖拽的viewHolder的Position int fromPosition = viewHolder.getAdapterPosition(); //拿到當前拖拽到的item的viewHolder int toPosition = target.getAdapterPosition(); if (fromPosition < toPosition) { for (int i = fromPosition; i < toPosition; i++) { Collections.swap(showBean.getData(), i, i + 1); } } else { for (int i = fromPosition; i > toPosition; i--) { Collections.swap(showBean.getData(), i, i - 1); } } showRvAdapter.notifyItemMoved(fromPosition, toPosition); return true; } @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { } /** * 重寫拖拽可用 * @return */ @Override public boolean isLongPressDragEnabled() { return false; } /** * 長按選中Item的時候開始呼叫 * * @param viewHolder * @param actionState */ @Override public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) { if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) { viewHolder.itemView.setBackgroundColor(Color.LTGRAY); } super.onSelectedChanged(viewHolder, actionState); } /** * 手指鬆開的時候還原 * @param recyclerView * @param viewHolder */ @Override public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { super.clearView(recyclerView, viewHolder); viewHolder.itemView.setBackgroundColor(0); } }); mItemTouchHelper.attachToRecyclerView(tagdragView);
在要準備拖拽的控制元件的事件裡面設定:
mItemTouchHelper.startDrag(addViewHolder);