RecyclerView的出现不能否认是开发者们的福利,它自带的ItemTouchHelper能很是轻松的完成侧滑删除、长按拖拽,可是不免有的开发者不会使。再加上实际的开发中侧滑删除每每会用侧滑菜单来实现,这就难为了有些开发者了。SwipeRecyclerView的出现就完美的解决了这些问题,侧滑删除、长按拖拽Item仅须要一句话…java
由于SwipeRecyclerView发布已经一个月了,如今有了几个不小的更新,都是刚需,因此再次分享出来给你们,但愿你们能多多支持。android
SwipeRecyclerView将完美解决这些问题:git
- 如下功能所有支持:竖向ListView、横向ListView、Grid、StaggeredGrid四种形式。
- RecyclerView 左右两侧 侧滑菜单。
- 菜单能够自适应Item不一样高度。
- 某一个Item显示的不一样的菜单(相似QQ)。
- 菜单横向排布、菜单竖向排布(看下图)。
- RecyclerView长按拖拽Item。
- RecyclerView侧滑删除item。
- 指定RecyclerView的某一个Item不能滑动删除或长按拖拽。
- 用SwipeMenuLayout在任何地方均可以实现你本身的侧滑菜单。
- 使用SwipeRecyclerView下拉刷新、自动加载更多。
- 能够和ViewPager嵌套使用(兼容滑动冲突)。
SwipeRecyclerView的源码托管在Github:github.com/yanzhenjie/…,欢迎Star。github
若是你是手机看本文,记不住项目地址没关系,记住个人我的主页就好,个人全部项目在我网站都有。app
个人域名是:yanzhenjie.com,也就是我名字严振杰.com,我相信你确定记住了,没记住的再看一眼啦。框架
要是还没记住,更简单的是百度/Google搜索我名字:严振杰,排名第一的就是我。ide
gif有一些失真,且网页加载速度慢,能够[下载demo的apk][3]看效果。 布局
SwipeMenuLayout
开发本身的侧滑菜单。
compile 'com.yanzhenjie:recyclerview-swipe:1.0.2'复制代码
Or Maven:网站
<dependency>
<groupId>com.yanzhenjie</groupId>
<artifactId>recyclerview-swipe</artifactId>
<version>1.0.2</version>
<type>pom</type>
</dependency>复制代码
这里列出关键实现,具体请参考demo,或者加最上面的交流群一块儿讨论。 更多教程请进入个人博客查看。spa
recyclerView.setLongPressDragEnabled(true);// 开启长按拖拽
recyclerView.setItemViewSwipeEnabled(true);// 开启滑动删除。
recyclerView.setOnItemMoveListener(onItemMoveListener);// 监听拖拽和侧滑删除,更新UI和数据。复制代码
侧滑菜单支持自动打开某个Item的菜单,并能够指定是左边仍是右边的:
// 打开第一个Item的左侧菜单。
recyclerView.openLeftMenu(0);
// 打开第一个Item的右侧菜单。
recyclerView.openRightMenu(0);复制代码
第一步,引用自定义View:SwipeMenuReyclerView:
<com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior" />复制代码
第二步,设置菜单建立器、菜单点击监听:
SwipeMenuRecyclerView swipeMenuRecyclerView = findViewById(R.id.recycler_view);
// 设置菜单建立器。
swipeMenuRecyclerView.setSwipeMenuCreator(swipeMenuCreator);
// 设置菜单Item点击监听。
swipeMenuRecyclerView.setSwipeMenuItemClickListener(menuItemClickListener);复制代码
第三步,菜单建立器建立菜单:
/** * 菜单建立器。在Item要建立菜单的时候调用。 */
private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() {
@Override
public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) {
SwipeMenuItem addItem = new SwipeMenuItem(mContext)
.setBackgroundDrawable(R.drawable.selector_green)// 点击的背景。
.setImage(R.mipmap.ic_action_add) // 图标。
.setWidth(size) // 宽度。
.setHeight(size); // 高度。
swipeLeftMenu.addMenuItem(addItem); // 添加一个按钮到左侧菜单。
SwipeMenuItem deleteItem = new SwipeMenuItem(mContext)
.setBackgroundDrawable(R.drawable.selector_red)
.setImage(R.mipmap.ic_action_delete) // 图标。
.setText("删除") // 文字。
.setTextColor(Color.WHITE) // 文字颜色。
.setTextSize(16) // 文字大小。
.setWidth(size)
.setHeight(size);
swipeRightMenu.addMenuItem(deleteItem);// 添加一个按钮到右侧侧菜单。.
// 上面的菜单哪边不要菜单就不要添加。
}
};复制代码
更多使用方法请参考Demo,或者加最上方的QQ群来交流。
第四步,继承SwipeMenuAdapter,和正常的Adapter同样使用:
public class MenuAdapter extends SwipeMenuAdapter<MenuAdapter.DefaultViewHolder> {
@Override
public int getItemCount() {
return 0;
}
@Override
public View onCreateContentView(ViewGroup parent, int viewType) {
return null;
}
@Override
public ViewHolder onCompatCreateViewHolder(View realContentView, int viewType) {
return null;
}
@Override
public void onBindViewHolder(MenuAdapter.DefaultViewHolder holder, int position) {
}
}复制代码
就到这里,更多的细节,请参考Github上的demo和源码,源码demo下载传送门。