android RecyclerView侧滑菜单,滑动删除,长按拖拽,下拉刷新上拉加载
作者:严振杰 发布时间:2022-01-31 12:20:46
本文介绍的库中的侧滑效果借鉴自SwipeMenu,并对SipwMenu的源码做了修改与Bug修复,然后才开发出的SwipeRecyclerView。
需要说明的是,本库没有对RecyclerView做大的修改,只是ItemView的封装。看起来是对RecyclerView的修改,其实仅仅是为RecyclerView添加了使用的方法API而已。
本库已经更新了三个版本了,会一直维护下去,根据小伙伴的要求,以后也会添加一些其它功能。
SwipeRecyclerView将完美解决这些问题:
以下功能全部支持:竖向ListView、横向ListView、Grid、StaggeredGrid四种形式。
RecyclerView 左右两侧 侧滑菜单。
菜单横向排布、菜单竖向排布。
RecyclerView长按拖拽Item。
RecyclerView侧滑删除item。
指定RecyclerView的某一个Item不能滑动删除或长按拖拽。
某一个Item显示的不同的菜单(类似QQ)。
用SwipeMenuLayout在任何地方都可以实现你自己的侧滑菜单。
使用SwipeRecyclerView下拉刷新、自动加载更多。
可以和ViewPager嵌套使用(兼容滑动冲突)。
引用方法
AndroidStudio使用Gradle构建添加依赖(推荐)
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>
我在开发SwipeRecyclerView时引用的RecyclerView版本如下:
compile 'com.android.support:recyclerview-v7:23.4.0'
效果图
gif有一些失真,且网页加载速度慢,可以[下载demo的apk][3]看效果。
侧滑菜单
左右两侧都有菜单,主动调出第几个菜单或者手指滑动出现。
根据ViewType某一个Item显示的不同的菜单(类似QQ)
和ViewPager嵌套 下拉刷新、自动加载更多
和ViewPager嵌套使用,兼容了滑动冲突。
可以和任何下拉刷新的框架结合,滑动到底部自动加载更多。
长按拖拽 侧滑菜单结合使用
一直按住Item进行拖拽排序,支持List、Grid形式。
长按拖拽并且和侧滑菜单结合使用。
直接滑动删除 长按拖拽Item排序
侧滑直接删除,也可以长按拖拽排序。
可以指定某个Item不能被侧滑删除、不能被长按拖拽。
竖型菜单 用自定义布局实现自己的菜单
给菜单设置排列方向,支持横向、竖向。
开发者用库中的SwipeMenuLayout开发自己的侧滑菜单。
使用介绍
这里列出关键实现,具体请参考demo,或者加最上面的交流群一起讨论。 更多教程请进入我的博客查看。
启用SwipeReyclerView的长按Item拖拽功能和侧滑删除功能
recyclerView.setLongPressDragEnabled(true);// 开启长按拖拽
recyclerView.setItemViewSwipeEnabled(true);// 开启滑动删除。
recyclerView.setOnItemMoveListener(onItemMoveListener);// 监听拖拽和侧滑删除,更新UI和数据。
添加Item侧滑菜单
侧滑菜单支持自动打开某个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。
第四步,继承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) {
}
}
就到这里,更多的细节,请参考demo和源码,源码demo下载传送门。
来源:http://blog.csdn.net/yanzhenjie1003/article/details/52115566


猜你喜欢
- 回顾:上一篇文章总结了影院售票系统核心部分-售票,整个项目也就完成了2/3了,需求中也要求了对销售信息的保存,今天就继续总结销售信息的保存以
- springboot读取配置文件到静态工具类通常我们读取配置文件可以用@Value注解和@Configuration,@Configurat
- Intellij IDEA 最突出的功能自然是调试(Debug),可以对Java代码,JavaScript,JQuery,Ajax等技术进行
- 报错信息一:jQuery.handleError is not a function 上传图片的时候,通过F12,查看到这个错误。
- C#文件夹加锁小工具用C#语言实现一个文件夹锁的程序,网上类似的“xxx文件夹xxx”软件很多,但是基本上都是C/C++语言实现的,且都没有
- Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示。本文从Queue接口函数出发,结合生动的图解,深入浅出地分
- 一家移动互联网公司,说到底,要盈利总是需要付费用户的,自己开发支付系统对于资源有限的公司来说显然不太明智,国内已经有多家成熟的移动支付提供商
- 本文实例讲述了java编程实现基于UDP协议传输数据的方法。分享给大家供大家参考,具体如下:UDP协议(User Datagram Prot
- 1.通过用FTP进行上传文件,首先要实现建立FTP连接,一般建立FTP连接,需要知道FTP配置有关的信息。一般要在Bean中建立一个Serv
- 1 简介在 Java 语言中,共有 8 个基本的数据类型,分别为:byte、short、int、long、float、double、bool
- 一、前言随着微服务治理手段越来越多,对开发者来说,不同微服务之间的接口调用是日常开发中非常普遍的事情,以springcloud生态体系的微服
- WPF的ImageBrush是一个比较常见也比较复杂的笔刷,它继承自图块笔刷(TileBrush)。使用图块画笔绘制区域涉及以下三个组成部分
- 目录前言一、Apache poi1.1 首先添加依赖1.2 导出excel1.2.1 HSSF方式导出(.xls方式)1.2.2 XSSF方
- 随着手机性能的提高,以及iOS和Android两个平台的普及,更多的App都会选择两个平台的App都进行开发,在有些时候,为了更加快速的开发
- 这几天恰好和朋友谈起了递归,忽然发现不少朋友对于“尾递归”的概念比较模糊,网上搜索一番也没有发现讲解地完整详细的资料,于是写了这么一篇文章,
- C# httpwebrequest访问HTTPS链接时遇到这个错误,但是如果我开抓包工具,比如filddler2,则POST返回正常错误提示
- 目录前言项目环境1.线程池示例2.shutdown3.isShutdown4.isTerminated5.awaitTermination6
- 最近开发的时候,偶尔遇到在线上稳定运行的webview内嵌的h5页面加载不出来,一直定位不到具体原因(因为我们自己做的兼容性测试上不重现),
- 前言最近在工作中遇到了这么一个需求:如何实现 Android 应用前后台切换的监听?下面来一起看看详细的介绍:iOS 内边是可以实现的,Ap
- Android程序中,Tab标签窗口是一种常用的UI界面元素。它的实现主要是利用了TabHost类。TabHost说明TabHost是一个标