android.support.v7 fragme,打造最强RecyclerView侧滑菜单,长按拖拽Item,滑动删除Item

前几天写了一片关于RecyclerView滑动删除Item,RecyclerView长按拖拽Item的博客,本来很简单一个使用,阅读量还挺高的,原博客传送门。

今天介绍一个RecyclerView Item侧滑菜单,RecyclerView滑动删除Item,RecyclerView长按拖拽Item的开源项目,效果看下图,大家也可以下载演示apk具体操作体验下SwipeRecyclerView的强大。

需要说明的是,本库没有对RecyclerView做大的修改,只是ItemView的封装。看起来是对RecyclerView的修改,其实仅仅是为RecyclerView添加了使用的方法API而已。

今天的博客将完美解决这些问题:

RecyclerView侧滑菜单(左右两侧都可以添加)(List、Grid两种形式)。

RecyclerView长按拖拽Item(List、Grid两种形式)。

RecyclerView侧滑删除item(List、Grid两种形式)。

指定RecyclerView的某一个Item不能滑动删除或长按拖拽(List、Grid两种形式)。

根据Item的ViewType来决定显示的菜单。

用SwipeMenuLayout在任何地方都可以实现你自己的侧滑菜单。

SwipeRecyclerView的源码托管在Github:https://github.com/yanzhenjie...,欢迎Star。

如果不能打开Github,直接从CSDN上下载Demo。

效果图

如果网页加载速度慢,可以下载demo的apk看效果。

侧滑菜单

RecyclerView Item侧滑菜单。左右两侧都可以添加侧滑菜单,菜单Item包括图标、文字、点击背景颜色等。也可以根据Item的ViewType来决定某个Item的Menu的样子、类型等:

14600000067603231460000006237221

拖拽、侧滑菜单

RecyclerView Item长按后拖拽Item移动位置。同时支持Item长按拖拽、Item侧滑显示菜单。包括各种布局管理器,比如LinearLayoutManager、GridLayoutManager都完美支持:

14600000062372271460000006237229

拖拽、侧滑删除

可以指定某个Item不能被拖拽,指定某个Item不能被滑动删除:

14600000062372321460000006237235

引用方法

Eclipse 请自行下载源码。

AndroidStudio使用Gradle构建添加依赖(推荐)

compile 'com.yanzhenjie:recyclerview-swipe:1.0.0'

本库引用的RecyclerView版本如下:

compile 'com.android.support:recyclerview-v7:23.4.0'

使用介绍

这里列出关键实现,具体请参考demo,或者加我博客左侧的交流群或者关注我的公众微信一起来讨论。

实现原理

侧滑菜单使用自定义Layout实现,继承自FragmeLayout。

长按拖拽Item、滑动Item删除由ItemTouchHelper实现。

启用SwipeReyclerView的长按Item拖拽功能和侧滑删除功能

recyclerView.setLongPressDragEnabled(true);// 开启长按拖拽

recyclerView.setItemViewSwipeEnabled(true);// 开启滑动删除。

recyclerView.setOnItemMoveListener(onItemMoveListener);// 监听拖拽和侧滑删除,更新UI。

...

/**

* 当Item移动的时候监听。

*/

private OnItemMoveListener onItemMoveListener = new OnItemMoveListener() {

@Override

public boolean onItemMove(int fromPosition, int toPosition) {

// 当Item被拖拽的时候,交换Item的位置。

Collections.swap(mStrings, fromPosition, toPosition);

mMenuAdapter.notifyItemMoved(fromPosition, toPosition);

return true;

}

@Override

public void onItemDismiss(int position) {

// 当Item被滑动删除的时候,删除Item。

mStrings.remove(position);

mMenuAdapter.notifyItemRemoved(position);

Toast.show(mContext, "第" + position + "条被删除。");

}

};

添加Item侧滑菜单

侧滑菜单支持自动打开某个Item的菜单,并可以指定是左边还是右边的:

// 打开第一个Item的左侧菜单。

recyclerView.openLeftMenu(0);

// 打开第一个Item的右侧菜单。

recyclerView.openRightMenu(0);

第一步,引用自定义View:SwipeMenuReyclerView:

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);// 添加一个按钮到右侧侧菜单。

}

};

第四步,继承SwipeMenuAdapter,和正常的Adapter一样使用:

public class MenuAdapter extends SwipeMenuAdapter {

@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下载传送门。

欢迎加入我的技术交流群:Android 愚公移山③ 547839514

欢迎关注我的公众号,长期不断推送优选博文、优秀开源项目,欢迎投稿:

1460000006237240

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547474.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

有关PHP、HTML单引号、双引号转义以及转成HTML实体的那些事!

一、单引号和双引号转义在PHP的数据存储过程中用得比较多,即往数据库里面存储数据时候需要注意转义单、双引号; 先说几个PHP函数: 1、addslashes — 使用反斜线引用(转义)字符串; 返回字符串,…

centos 8 安装使用配置

服务端安装nfs 1、使用yum安装nfs yum install nfs-utils nfs-utils-lib -y 如果出现上述错误请安装lvm2 yum install -y lvm2 2、编辑文件exports vim /etc/exports 加入代码,如: /home *(insecure,rw,sync,no_root_squash) #参数详解 ro #只读共享…

2s相机 android6,Android Camera2 使用总结

最近在做自定义相机相关的项目,网上查了资料都是有关android.hardware.Camera的资料,开始使用的才发现这个类已经废弃了。Android 5.0(21)之后android.hardware.Camera就被废弃了,取而代之的是全新的android.hardware.Camera2 。Android 5.0对…

CentOS 7上搭建Spark3.0.1+ Hadoop3.2.1分布式集群

CentOS 7上搭建Spark3.0.1 Hadoop3.2.1分布式集群 VMWare 安装CentOS 7使用Xshell连接虚拟机集群设置安装JDK 1.8SSH 免密登陆安装hadoop 3.2安装Spark 3.0.1总结VMWare 安装CentOS 7 推荐使用VMware Workstation Pro 16,下载安装即可。下载最新的CentOS 7 Minimal…

再见安卓 你好鸿蒙,安卓,再见!你好,鸿蒙系统!

今年9月份,华为宣布鸿蒙OS操作系统将面向手机发布,今年12月份正式开放开发者Beta版本。昨天,华为鸿蒙OS迎来里程碑式的新进展,开发者Beta版本如约而至,正式开启线上公测招募,我们也可以可以一睹鸿蒙系统真容…

Kubernetes 部署 Traefik Ingress 控制器 (1.7.12)

目录[-] . 一、Ingress 介绍. 二、Traefik 介绍. 三、部署 Ingress 控制器 Traefik. 1、Traefik 两种部署方式介绍. 2、创建 Traefik 配置文件. 3、将 Traefik 配置文件挂载到 ConfigMap. 4、设置 CA 证书. 5、给节点设置 Label. 6、创建 Traefik 服务账户与角色权限. 7、创建…

Git本地缓存问题 修改密码后git无法拉取

Git本地缓存问题 修改密码后git无法拉取 问题描述:使用正确的用户名和密码可以登录到Git代码仓库,但是在本地无法使用Git bash命令行的方式拉取代码。 问题原因:第一次使用Git bash方式拉取代码时,会根据当前的用户和密码生成一串…

Ext.Net常用方法

1、js(Ext)操作 Ext.Msg.alert(系统提示, 未连接血站,该功能暂时不能使用。); Ext.getCmp("id").getValue();Ext.getCmp("id").focus();Ext.getCmp("id").selectText(); //选中修改 if (!GridPanel1.hasSelec…

Pytorch 版YOLOV5训练自己的数据集

1、环境搭建 https://github.com/ultralytics/yolov5 2、安装需要的软件 pip install -U -r requirements.txt 3、准备数据 在data文件下建立上面三个文件(Annotations、images与ImageSets,labels后续我们脚本生成)其中Annotations存放xml…

使用SQL Server作业设置定时任务

1.开启SQL Server Agent服务 使用作业需要SQL Agent服务的支持,并且需要设置为自动启动,否则你的作业不会被执行。 以下步骤开启服务:开始-->>>运行-->>>输入"services.msc"-->>>进入服务,开启SQL Server Agent服…

ListView与GridView优化

前言 ListView是Android中最常用的控件,通过适配器来进行数据适配然后显示出来,而其性能是个很值得研究的话题。本文与你一起探讨Google I/O提供的优化Adapter方案,欢迎大家交流。 声明 欢迎转载,但请保留文章原始出处:) 博客园&…

2021安徽舒城中学高考成绩查询,2021安徽省地区高考成绩排名查询,安徽省高考各高中成绩喜报榜单...

怀宁中学芜湖2017年芜湖市高考文科头名是来自于芜湖师大附中的唐逸云,高考成绩653分。2017年芜湖市高考理科头名是来自于芜湖师大附中的茅志鹏,高考成绩676分。师大附中芜湖一中淮南淮南二中文科考生最高分631(市应届生第一名),理科考生最高分…

jsonp的简单学习

前言:说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可以通过服务…

win7台式计算机怎么连热点,怎么用台式电脑开热点,电脑怎么开热点win7

导读:手机是每个人的随身携带之物,手机的功能让越来越多的人痴迷其中,也正是因为这个原因,手机流量的消耗也越来越多,购买流量让我们花费了很多金钱,我们该如何解决这个问题呢?下面我们就一起来看看电脑的…

WebLogic11g-创建域(Domain)及基本配置

2019独角兽企业重金招聘Python工程师标准>>> 最近看到经常有人提问weblogic相关问题,所以闲暇之际写几篇博文(基于weblogic11),仅供大家参考。 具体weblogic的介绍以及安装,这里就不赘述了。 以域的创建开篇…

计算机教室规则英语作文,班级规则初中英语作文

【导语】无规则不成方圆,班级亦是如此,也拥有属于它的规章制度。下面是无忧考网为你整理的有关班级规则初中英语作文,希望你喜欢!【篇一】班级规则初中英语作文Students should get to school for a half-hour reading before 7:30. Everyone…

高拍仪拍照SDK开发(良田影像S300L|S500L)

高拍仪拍照SDK开发下载地址:点击下载 本SDK适用于:良田影像S300L|S500L 高拍仪如图: SDN开发包安装之后找到安装目录,如图: 大家找到各自需要的版本即可,需要注意的是如果需要上传图片到服务器的话&#…

gitlab的用户使用手册

最近比较忙,没时间写博客,今天来的早所以写一篇关于gitlab的使用手册分享给大家。目录一、账户/项目申请二、登陆与修改密码三、SSH Key导入四、上传/下载代码1、上传(用户系统为linux)2、下载(用户系统为linux&#x…

学计算机多久能拿证,计算机证书多久能领取 什么时候拿

计算机证书多久能领取,什么时候能拿,小编整理了相关信息,希望会对大家有所帮助!计算机证书什么时候能领取1、一般情况下是考试结束后50个工作日左右出成绩及出证。全国计算机等级考试证书一年两次考试。每年的3月与9月考试。2、证…