SwipeRecyclerView-快速构建MD化的RecyclerView滑动菜单
项目地址:https://github.com/yanzhenjie/SwipeRecyclerView
此项目是一个RecyclerView的扩展,Android提供了RecyclerView这一强大的滚动控件,但实际使用起来却较为麻烦。如需快速添加滑动菜单,这个库能帮你解决问题。
特性
- Item侧滑菜单,支持水平分布、垂直分布
- Item长按拖拽、侧滑删除
- 添加/移除HeaderView/FooterView
- 自动/点击加载更多的功能
- Sticky普通布局黏贴和ReyclerView分组黏贴
如何使用
在app的build.gradle里添加如下代码:
dependencies { implementation 'com.yanzhenjie:recyclerview-swipe:1.2.3' }
之后便可以在XML布局中加入SwipeRecyclerView:
<com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView .../>
之后便可以设置侧滑菜单了:
SwipeMenuRecyclerView recyclerView = findViewById(R.id.swipeRecyclerView) recyclerView.setSwipeMenuCreator((leftMenu, rightMenu, position) -> { SwipeMenuItem delete = new SwipeMenuItem(coordinatorLayout.getContext()) .setBackgroundColorResource(R.color.colorRed) .setImage(R.drawable.ic_delete_white_24dp) .setHeight(MATCH_PARENT) .setWidth(200); leftMenu.addMenuItem(delete); });
Kotlin:
val recyclerView = findViewById(R.id.swipeRecyclerView) recyclerView.setSwipeMenuCreator({ leftMenu, rightMenu, position-> val delete = SwipeMenuItem(coordinatorLayout.getContext()) .setBackgroundColorResource(R.color.colorRed) .setImage(R.drawable.ic_delete_white_24dp) .setHeight(MATCH_PARENT) .setWidth(200) leftMenu.addMenuItem(delete) })
为侧滑菜单设置监听:
recyclerView.setSwipeMenuItemClickListener((menuBridge, position) -> { menuBridge.closeMenu(); int direction = menuBridge.getDirection(); if (direction == SwipeMenuRecyclerView.LEFT_DIRECTION && menuBridge.getPosition() == 0) { //do something } });
Kotlin:
recyclerView.setSwipeMenuItemClickListener({ menuBridge, position-> menuBridge.closeMenu() val direction = menuBridge.getDirection() if ((direction == SwipeMenuRecyclerView.LEFT_DIRECTION && menuBridge.getPosition() === 0)) { //do something } })
侧滑删除和拖拽
拖拽和侧滑删除的功能默认关闭的,所以先要打开功能:
recyclerView.setLongPressDragEnabled(true); // 拖拽排序,默认关闭。 recyclerView.setItemViewSwipeEnabled(true); // 侧滑删除,默认关闭。
只需要设置上面两个属性就可以进行相应的动作了,如果不需要哪个,不要打开就可以了。
然后监听拖拽和侧滑的动作,进行数据更新:
recyclerView.setOnItemMoveListener(mItemMoveListener);// 监听拖拽,更新UI。 OnItemMoveListener mItemMoveListener = new OnItemMoveListener() { @Override public boolean onItemMove(ViewHolder srcHolder, ViewHolder targetHolder) { // 此方法在Item拖拽交换位置时被调用。 // 第一个参数是要交换为之的Item,第二个是目标位置的Item。 // 交换数据,并更新adapter。 int fromPosition = srcHolder.getAdapterPosition(); int toPosition = targetHolder.getAdapterPosition(); Collections.swap(mDataList, fromPosition, toPosition); adapter.notifyItemMoved(fromPosition, toPosition); // 返回true,表示数据交换成功,ItemView可以交换位置。 return true; } @Override public void onItemDismiss(ViewHolder srcHolder) { // 此方法在Item在侧滑删除时被调用。 // 从数据源移除该Item对应的数据,并刷新Adapter。 int position = srcHolder.getAdapterPosition(); mDataList.remove(position); adapter.notifyItemRemoved(position); } };
还有更多功能,请到GitHub页面查看Readme。
该项目基于 Apache-2.0 许可证。