当前位置:   article > 正文

RecylerView实现长按拖拉更改item位置_recycleview 一个item拖动到另一个上面item的时候,交换位置

recycleview 一个item拖动到另一个上面item的时候,交换位置

效果图:


实现步骤:

1.新建一个类继承  ItemTouchHelper.Callback:

  1. class ItemDrag extends ItemTouchHelper.Callback{
  2. //设置可移动的标志,我用的GridLayout,所有可移动标志为up,down,left,right. 如果是LinerLayout,就是up,down.
  3. @Override
  4. public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
  5. int dragFlags = ItemTouchHelper.UP|ItemTouchHelper.DOWN
  6. |ItemTouchHelper.LEFT|ItemTouchHelper.RIGHT;
  7. int swipeFlags = 0;
  8. return makeMovementFlags(dragFlags,swipeFlags);
  9. }
  10. //移动时会触发这个方法
  11. @Override
  12. public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
  13. int fromPosition = viewHolder.getAdapterPosition(); //取得第一个item的position
  14. int toPosition = target.getAdapterPosition(); //取得目标item的position
  15. Collections.swap(mChoosed,fromPosition,toPosition); //mChoosed是Recylerview的data集合,将两个item交换
  16. mChoosedTagAdapter.notifyItemMoved(fromPosition,toPosition); //recylerview的adapter通知交换更新
  17. return true;
  18. }
  19. @Override
  20. public boolean isLongPressDragEnabled() { //设置是否开启长按可拖拉
  21. mShowIcon = true;
  22. mTagAdapter.notifyDataSetChanged();
  23. mChoosedTagAdapter.notifyDataSetChanged();
  24. mButton.setText("完成");
  25. return true;
  26. }
  27. @Override //移动完成后的回调
  28. public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
  29. }
  30. @Override //设置移动时背景色
  31. public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
  32. if(actionState != ItemTouchHelper.ACTION_STATE_IDLE){
  33. viewHolder.itemView.setBackgroundColor(Color.LTGRAY);
  34. }
  35. super.onSelectedChanged(viewHolder, actionState);
  36. }
  37. @Override//移动完成后恢复背景色
  38. public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
  39. super.clearView(recyclerView, viewHolder);
  40. viewHolder.itemView.setBackgroundColor(0);
  41. }
  42. }

2.创建ItemTouchHelper类的实例,参数为你自己写的那个继承callback的类,并为recylerview设置这个ItemTouchHelper.


然后就ok啦。


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/286804
推荐阅读
相关标签
  

闽ICP备14008679号