Android 在RecyclerView中实现拖拽和滑动删除的效果

来源:互联网 发布:软件测试并发测试 编辑:程序博客网 时间:2024/05/13 13:37

参考
1、http://stackoverflow.com/questions/27293960/swipe-to-dismiss-for-recyclerview/30601554#30601554
2、https://developer.android.com/reference/android/support/v7/widget/helper/ItemTouchHelper.SimpleCallback.html
3、https://medium.com/@ipaulpro/drag-and-swipe-with-recyclerview-b9456d2b1aaf

效果如下:

1、更新Android Support Library

compile 'com.android.support:recyclerview-v7:22.2.+'

2、new一个SimpleCallback出来

ItemTouchHelper.SimpleCallback callback = new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN,                ItemTouchHelper.LEFT) {            @Override            public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder source, RecyclerView.ViewHolder target) {                final int fromPos = source.getAdapterPosition();                final int toPos = target.getAdapterPosition();                mAdapter.mOnMove(fromPos, toPos);                return true;            }            @Override            public void onSwiped(RecyclerView.ViewHolder viewHolder, int i) {                mAdapter.mOnSwiped(viewHolder);            }        };

他有两个参数,第一个为drag操作的方向,第二个为swipe操作的方向。
在onMove方法中具体写移动拖拽item的操作,onSwiped中写滑动的操作。

//    drag的具体操作    public void mOnMove(int fromPos,int toPos) {        String prev = mList.remove(fromPos);        mList.add(toPos > fromPos ? toPos - 1 : toPos, prev);        notifyItemMoved(fromPos, toPos);    }
//    swipe的具体操作    public void mOnSwiped(RecyclerView.ViewHolder viewHolder) {        mList.remove(viewHolder.getAdapterPosition());        notifyItemRemoved(viewHolder.getAdapterPosition());    }

3、new一个ItemTouchHelper

ItemTouchHelper mItemTouchHelper = new ItemTouchHelper(callback);

4、把ItemTouchHelper和RecyclerView关联

mItemTouchHelper.attachToRecyclerView(mRecyclerView);

源码如下
https://github.com/mmga/ItemTouchHelperDemo-SimpleCallback

0 0
原创粉丝点击