recycleView滑动删除,拖动排序

简易实现了下,惯例先上效果图:



recycleView自带有个类ItemTouchHelper 可以方便的实现上图效果。

参考http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0630/3123.html


首先,我们迅速来一个recycleView

 mDatas = new ArrayList<String>();
        for (int i = 'A'; i < 'z'; i++) {
            mDatas.add("" + (char) i);
        }
        view.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
        view.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));
        adapter=new MyAdapter();
        view.setAdapter(adapter);
填充数据,布局管理,添加分隔,adapter…这些我就不说了。

ItemTouchHelper helper=new ItemTouchHelper(callback);
helper.attachToRecyclerView(view);

我们new出来一个helper,然后绑定到recycleView就可以了。重点在于构造helper时传入的callback。好在google为我们提供了无敌简单的实现方法ItemTouchHelper.SimpleCallback。

我们来看看google为我们提供的这个类。

 SimpleCallback(int dragDirs, int swipeDirs) 
构造的时候传入两个参数,第一是拖动方向,第二是滑动方向。

new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN,ItemTouchHelper.RIGHT)
我们要实现的是上下拖动排序,右滑删除。所以使用如上参数~ (ps:如果传入0,则表示不允许拖动/滑动)

然后callback有两个方法是要我们实现的:onMove,onSwiped。见名知意。

@Override
            public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
                int from=viewHolder.getAdapterPosition();
                int to=target.getAdapterPosition();
                Collections.swap(mDatas,from,to);
                adapter.notifyItemMoved(from, to);
                return true;
            }

            @Override
            public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
                int position=viewHolder.getAdapterPosition();
                mDatas.remove(position);
                adapter.notifyItemRemoved(position);
            }

这里给出我的实现,就是数据变更,然后notify就好。最后把

callback用来new helper。就有了上下拖动排序,右滑删除的功能了。

但是,还有一个问题,我们拖动,滑动的时候应该有状态变更的提示,比如效果图中的颜色加深。

实现也很简单,给item布局一个selector就解决。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值