android 批量查找view,Android Recyclerview实现多选,单选,全选,反选,批量删除的功能

效果图如下:

9f27de32eab4ef980ed09aa4ea64cc36.png

0a8578906443673645a8b77797b135bc.png

fb5dc885f973b2a64e950d043db3c307.png

recyclerview 实现多选,单选,全选,反选,批量删除的步骤

1.在recyclerview布局中添加上底部的全选和反选按钮,删除按钮,和计算数量等控件

2.这里选中的控件没有用checkbox来做,用的是imageview,选中和不选中其实是两张图片

3.默认是不显示选中的控件的,点击编辑的时候显示,点击取消的时候隐藏

4.通过adapter和activity数据之间的传递,然后进行具体的操作

具体代码如下:

在recyclerview的布局中写全选,反选,删除,计数等相应的控件

android:id="@+id/ll_mycollection_bottom_dialog"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="vertical"

android:layout_gravity="bottom"

android:visibility="gone"

android:background="@color/app_bg">

android:background="#e5e5e5"

android:layout_width="match_parent"

android:layout_height="1px"/>

android:background="@color/white"

android:layout_width="match_parent"

android:layout_height="@dimen/px_90">

android:layout_centervertical="true"

android:id="@+id/tv"

android:textcolor="#1a1a1a"

android:textsize="@dimen/px_28"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginleft="@dimen/px_30"

android:text="@string/mine_certify_select" />

android:layout_centervertical="true"

android:layout_torightof="@+id/tv"

android:textcolor="#1a1a1a"

android:textsize="@dimen/px_28"

android:id="@+id/tv_select_num"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginleft="@dimen/px_18"

android:text="0" />

android:textcolor="@color/color_b7b8bd"

android:textsize="@dimen/px_28"

android:layout_centervertical="true"

android:background="@drawable/button__noclickable_shape"

android:gravity="center"

android:id="@+id/btn_delete"

android:layout_width="@dimen/px_160"

android:layout_height="@dimen/px_66"

android:layout_marginright="@dimen/px_30"

android:layout_alignparentright="true"

android:text="删除" />

android:layout_centervertical="true"

android:id="@+id/select_all"

android:layout_marginright="@dimen/px_30"

android:background="@drawable/bg_selete_all"

android:layout_toleftof="@+id/btn_delete"

android:layout_width="@dimen/px_160"

android:layout_height="@dimen/px_66"

android:text="全选"

android:gravity="center"

android:textcolor="#000001"

android:textsize="@dimen/px_28"/>

adapter中的布局就不必再写了,就一个item,最左边一个imageview.

android:id="@+id/check_box"

android:src="@mipmap/ic_uncheck"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_vertical"

android:layout_marginleft="@dimen/px_24"

android:gravity="center"

android:visibility="gone"/>

布局写完开始写逻辑代码

首先在adapter定义一个方法,以便在activity中拿到数据添加进adapter中

public void notifyadapter(list mylivelist,boolean isadd){

if (!isadd){

this.mmylivelist=mylivelist;

}else {

this.mmylivelist.addall(mylivelist);

}

notifydatasetchanged();

}

然后在activity中拿到获取到数据后调用adapter中的这个方法,添加数据

madapter.notifyadapter(data.getlist(), false);

在adapter中在判空,更有保证

public list getmylivelist(){

if (mmylivelist == null) {

mmylivelist =new arraylist<>();

}

return mmylivelist;

}

然后adapter中的getitemcount就直接拿到上面这个mmylivelist的大小就可以了

接下来开始点击编辑的时候显示出imageview和recycleview中的底部全选反选部分

定义两个变量

private static final int mylive_mode_check = 0;

private static final int mylive_mode_edit = 1;

//点击编辑的时候显示,顺便调madapter.seteditmode(meditmode);赋值

meditmode = meditmode == mylive_mode_check ? mylive_mode_edit : mylive_mode_check;

if (meditmode == mylive_mode_edit) {

activity_btn.settext("取消");

ll_mycollection_bottom_dialog.setvisibility(view.visible);

editorstatus = true;

} else {

activity_btn.settext("编辑");

ll_mycollection_bottom_dialog.setvisibility(view.gone);

editorstatus = false;

onrefresh();

}

madapter.seteditmode(meditmode);

//当然,adapter中也有先关的变量在记录

private static final int mylive_mode_check = 0;

int meditmode = mylive_mode_check;

public void seteditmode(int editmode) {

meditmode = editmode;

notifydatasetchanged();

}

//在onbindviewholder中做显示和隐藏的操作.

holder.setisrecyclable(false); // 为了条目不复用

//显示和隐藏

if (meditmode == mylive_mode_check) {

holder.mcheckbox.setvisibility(view.gone);

} else {

holder.mcheckbox.setvisibility(view.visible);

为了方便记录选中的状态,在bean里面用个变量记起来

public boolean isselect;

public boolean isselect() {

return isselect;

}

public void setselect(boolean isselect) {

this.isselect = isselect;

}

//然后点击条目选中和不选中的时候为imageview设置不同的图片

if(mylive.isselect()) {

holder.mcheckbox.setimageresource(r.mipmap.ic_checked);

}else{

holder.mcheckbox.setimageresource(r.mipmap.ic_uncheck);

}

//在adapter中暴漏一个item的点击事件的接口

public interface onswipelistener {

void onitemclicklistener(int pos,list mylivelist);

}

/*

在activity中的item点击事件中,来操作imageview是否选中

*/

//用一个变量记录

private int index = 0;

mylive mylive = mylivelist.get(pos);

boolean isselect = mylive.isselect();

if (!isselect) {

index++;

mylive.setselect(true);

if (index == mylivelist.size()) {

isselectall = true;

selectall.settext("取消全选");

}

} else {

mylive.setselect(false);

index--;

isselectall = false;

selectall.settext("全选");

}

setbtnbackground(index);

tv_select_num.settext(string.valueof(index));

radioadapter.notifydatasetchanged();

/**

* 根据选择的数量是否为0来判断按钮的是否可点击.

*

* @param size

*/

private void setbtnbackground(int size) {

if (size != 0) {

mbtndelete.setbackgroundresource(r.drawable.button_shape);

mbtndelete.setenabled(true);

mbtndelete.settextcolor(color.white);

} else {

mbtndelete.setbackgroundresource(r.drawable.button__noclickable_shape);

mbtndelete.setenabled(false);

mbtndelete.settextcolor(contextcompat.getcolor(this, r.color.color_b7b8bd));

}

}

至于全选和反选的操作,就是遍历这个bean类,得到他的选择状态,重新设置就可以了.

if (radioadapter == null) return;

if (!isselectall) {

for (int i = 0, j = radioadapter.getmylivelist().size(); i < j; i++) {

radioadapter.getmylivelist().get(i).setselect(true);

}

index = radioadapter.getmylivelist().size();

mbtndelete.setenabled(true);

selectall.settext("取消全选");

isselectall = true;

} else {

for (int i = 0, j = radioadapter.getmylivelist().size(); i < j; i++) {

radioadapter.getmylivelist().get(i).setselect(false);

}

index = 0;

mbtndelete.setenabled(false);

selectall.settext("全选");

isselectall = false;

}

radioadapter.notifydatasetchanged();

setbtnbackground(index);

tv_select_num.settext(string.valueof(index));

最后删除的话就调删除的接口,遍历这个bean,判断当前的状态如果是选中的状态,就删除! 这样就ok了 !!!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。

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

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

相关文章

盘点和程序员相关的那些事,让你不再被割韭菜,薅羊毛!

如今的我们处在一个信息爆炸的时代&#xff0c;光埋头苦恼的闭门造车已经不能满足我们程序员的日常开销啦&#xff0c;因此需要密切关注和自己相关的那些事&#xff01; 目录 1.成功绝非偶然 2.你们公司几号发工资就代表你公司所处的级别 3.各大公司HR对学历的评价&#xff1…

微信抢红包

今晚就过年了,相信很多朋友在微信群能收到很多红包,但是过年可能吃的更重要。比如我~ 那么你需要如下一款软件。 那就是让你在百忙之中,都不会错过任意一个红包,也就是微信的抢红包神器。 我也是心血一热,想找个软件代替自己领红包,于是就找了找,并且试验了一波,确实是…

diy一个android手机版下载,原神个人自制版

原神个人自制版是一款十分有意思的自由探索游戏&#xff0c;用户在这里能看到不少的游戏角色&#xff0c;你需要做的就是不断的发挥出自己的“能力”&#xff0c;让游戏中的角色全部的到达你的队伍中。当然这里还有着不少的武器&#xff0c;等着用户的不断的寻找。原神个人自制…

linux备份用户权限

1:切换root用户&#xff0c;进入home目录&#xff0c;执行以下命令: [rootlocalhost home]# ll /home/wangfajun 2: home目录下执行以下命令进行wangfajun用户的权限备份&#xff1a; [rootlocalhost home]# getfacl -R wangfajun/ >permission.bak3: 改变权限&#xff0c;并…

微信限量纪念版code封面来啦,速看领取方式

临近春节&#xff0c;微信红包封面掀起了一阵热潮 前几天官方在开放平台出来这个活动。 是不是感觉这个封面特别的COOL&#xff0c;以代码的形式展示微信红包封面&#xff0c;鉴于大家如此的渴望这款封面&#xff0c;孙叫兽熬夜给大家制作10份。 预览一下效果&#xff1a; …

华为鸿蒙osbeta在哪看发布会,重磅消息!华为在发布鸿蒙OS2.0手机beta版本后,又发布搭载鸿蒙的新品!!...

原标题&#xff1a;重磅消息&#xff01;华为在发布鸿蒙OS2.0手机beta版本后&#xff0c;又发布搭载鸿蒙的新品&#xff01;&#xff01;就在12月16号华为刚刚发布鸿蒙OS2.0beta系统手机版本后&#xff0c;就在今天华为又举行了一个新品发布会&#xff0c;他就 是华为家庭智能和…

内存中数据模型和大数据持久性

ORM框架在希望与关系数据库进行交互时可以帮助开发人员。 对于关系数据库&#xff0c;有许多出色的ORM框架&#xff0c;例如Hibernate和Apache OpenJPA&#xff0c;其中一些确实很棒。 如今&#xff0c;大数据正在涌现&#xff0c;越来越多的人开发在大数据上运行的应用程序。…

CSDN主页下如何添加访客地图?

有大佬在付费专栏作者群提问这个问题,我们先来研究一下哈。 先看聊天记录吧 放大效果 这位博主是如何实现的呢? 我拿到了这个博客的地址,使用谷歌浏览器F12,拿到这部分代码。他这个是在自定义模块添加访问地图。 自定义模块需要是博客专家,企业博客或者VIP才可以编辑。只…

lucene_indexWriter说明、索引库优化

IndexWriter Hibernate的SessionFactory在Hibernate中。一般保持一个数据库就仅仅有一个SessionFactory。由于在SessionFactory中维护二级缓存&#xff0c;而SessionFactory又是线程安全的。所以SessionFactory是共享的。lucene的IndexWriter假设同一时候在一个索引库中同一时候…

600W个微信红包封面,人人都能领取到!!!

过年啦&#xff0c;祝大家春节快乐牛年大吉&#xff0c;万事如意&#xff01;别忘了春节还有红包封面领取新的一年愿大家财运亨通&#xff01;新年过完了&#xff0c;整理情绪上班了&#xff0c;祝福没有断&#xff0c;问候也依然。努力工作多表现&#xff0c;年后年终奖永远把…

android 二次绘制 layout,View的三次measure,两次layout和一次draw

我在《Android视图结构》这篇文章中已经描述了Activity,Window和View在视图架构方面的关系。前天&#xff0c;我突然想到为什么在setContentView中能够调用findViewById函数&#xff1f;View那时不是还没有被加载&#xff0c;测量&#xff0c;布局和绘制啊。然后就搜索了相关的…

盘点关于程序员的那些经典案例

深度剖析几个经典话题&#xff0c;以图文的形式展现&#xff0c;好好看图。 目录 1. 2014互联网职场薪酬报告&#xff01;你拖后腿了吗&#xff1f; 2. 月薪8K程序员现身说法&#xff1a;男人就该默默做技术&#xff01; 3.项目建设 4. 2014年亿级用户下的新浪微博平台架构…

html中文字过长 自动隐藏,css 实现文字过长自动隐藏功能

单行overflow: hidden;text-overflow: ellipsis;white-space: nowrap;多行(兼容各个浏览器)//通过覆盖最后几个字的形式p{position:relative;line-height:1.4em;height:4.2em;/* 3 倍line-height 多少倍就是多少行*/overflow:hidden;}.p::after {content:"...";font-…

使用Xtext为Eclipse和IntelliJ开发DSL

在这篇文章中&#xff0c;我们将看到如何开发一种简单的语言。 我们的目标是&#xff1a; 语言的解析器 IntelliJ的编辑器 。 编辑器应具有语法突出显示&#xff0c;验证和自动完成功能 我们还将免费提供Eclipse和Web编辑器的编辑器 &#xff0c;但请包含您的兴奋之处&#…

搬家后第一次缴电费,查询客户编号的解决办法

最近搬家后&#xff0c;发现家里停电了&#xff0c;不知道客户编号&#xff0c;想通过支付宝生活缴费模块充值。 解决办法。 1.走到电表跟前&#xff0c;连续按下电表白色按钮4-5下。会出现一个四位数的阿拉伯数字。比如&#xff1a;0088。取&#xff0c;后两位88。 2.再按一下…

html字符实体标签语法,HTML字符实体与文本格式化标签

HT环行进端处触码通法果泉位可近境其行框理发ML 字符实体/HTML 中的预留字符必须被替换为字符实体&#xff0c;一些在键盘上找不到的字符也可以使用字符实体来览页些求时是过解些这确如目前例总站回广随能4果泉时标配使能幻近器面实的我是接,前些模小架端如结的事告机对8和水兼…

ArcGIS API for Silverlight地图加载众多点时,使用Clusterer解决重叠问题

ArcGIS API for Silverlight地图加载众多点时&#xff0c;使用Clusterer解决重叠问题 原文:ArcGIS API for Silverlight地图加载众多点时&#xff0c;使用Clusterer解决重叠问题 问题&#xff1a;如果在地图上加载成百上千工程点时&#xff0c;会密密麻麻&#xff0c;外观不是很…

html 文本框 自动拼接,HTML 中table的结构以及拼接

表格基本上有如下几个标签构成:(1).(2).标签用来创建表格的行。(3).标签用来创建表头单元格。 t-head(4).标签用来创建tr行中的单元格。(5).标签用来创建标题。(6).标签用来创建表格的表头。 (一个table只能有一个)(7).标签用来创建表格的主体部分。(8).标签用来创建表格的页…

谈谈JAVA工程狮面试中经常遇到的面试题目------什么是MVC设计模式

作为一名java工程狮&#xff0c;大家肯定经历过很多面试&#xff0c;但每次几乎都会被问到什么是MVC设计模式&#xff0c;你是怎么理解MVC的类似这样的一系列关于MVC的问题。 【出现频率】 【关键考点】 MVC的含义MVC的结构 【考题分析】  在java Web开发中&#xff0c;存在两…

mvc 一般注释_使用带有注释和JQuery的Spring MVC 3的Ajax

mvc 一般注释与Ajax一起工作对我来说一直很有趣&#xff01; 是不是 &#xff1f; 我将使您轻松将Ajax与Spring MVC 3和JQuery结合使用。 这篇文章将向您说明如何在工业编码的现实生活中使用Ajax。 和往常一样&#xff0c;我们将在Spring MVC 3框架中以Ajax的实际示例为例&…