Android Recyclerview实现多选,单选,全选,反选,批量删除的功能
程序员文章站
2023-10-19 23:03:07
效果图如下:
recyclerview 实现多选,单选,全选,反选,批量删除的步骤
1.在recyclerview布局中添加...
效果图如下:
recyclerview 实现多选,单选,全选,反选,批量删除的步骤
1.在recyclerview布局中添加上底部的全选和反选按钮,删除按钮,和计算数量等控件
2.这里选中的控件没有用checkbox来做,用的是imageview,选中和不选中其实是两张图片
3.默认是不显示选中的控件的,点击编辑的时候显示,点击取消的时候隐藏
4.通过adapter和activity数据之间的传递,然后进行具体的操作
具体代码如下:
在recyclerview的布局中写全选,反选,删除,计数等相应的控件
<linearlayout 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"> <view android:background="#e5e5e5" android:layout_width="match_parent" android:layout_height="1px"/> <relativelayout android:background="@color/white" android:layout_width="match_parent" android:layout_height="@dimen/px_90"> <textview 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" /> <textview 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" /> <button 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="删除" /> <textview 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"/> </relativelayout> </linearlayout>
adapter中的布局就不必再写了,就一个item,最左边一个imageview.
<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.mylive> mylivelist,boolean isadd){ if (!isadd){ this.mmylivelist=mylivelist; }else { this.mmylivelist.addall(mylivelist); } notifydatasetchanged(); }
然后在activity中拿到获取到数据后调用adapter中的这个方法,添加数据
madapter.notifyadapter(data.getlist(), false);
在adapter中在判空,更有保证
public list<mylivelist.mylive> 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.mylive> 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了 !!!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
Android checkbox的listView(多选,全选,反选)具体实现方法
-
Android Recyclerview实现多选,单选,全选,反选,批量删除的功能
-
android 实现ListView嵌套Checkbox实现真正的多选、全选、反选、取消
-
Android实现二级购物车的全选加反选、总价功能
-
RecyclerView实现购物车的全选、反选功能
-
js实现多选,全选,反选的功能
-
android 实现ListView嵌套Checkbox实现真正的多选、全选、反选、取消
-
vue如何实现单选多选反选全选全不选的而功能(附代码)
-
基于Thinkphp和jquery 实现ajax多选反选不选删除数据的功能
-
基于Thinkphp和jquery 实现ajax多选反选不选删除数据的功能