简易实现了下,惯例先上效果图:
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就解决。