100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > android 批量查找view Android Recyclerview实现多选 单选 全选 反选 批量删除的功能

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

时间:2018-09-26 13:01:40

相关推荐

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

效果图如下:

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了 !!!

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。