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 许可证。

