android 批量查找view,Android Recyclerview实现多选,单选,全选,反选,批量删除的功能
效果圖如下:
recyclerview 實(shí)現(xiàn)多選,單選,全選,反選,批量刪除的步驟
1.在recyclerview布局中添加上底部的全選和反選按鈕,刪除按鈕,和計(jì)算數(shù)量等控件
2.這里選中的控件沒(méi)有用checkbox來(lái)做,用的是imageview,選中和不選中其實(shí)是兩張圖片
3.默認(rèn)是不顯示選中的控件的,點(diǎn)擊編輯的時(shí)候顯示,點(diǎn)擊取消的時(shí)候隱藏
4.通過(guò)adapter和activity數(shù)據(jù)之間的傳遞,然后進(jìn)行具體的操作
具體代碼如下:
在recyclerview的布局中寫(xiě)全選,反選,刪除,計(jì)數(shù)等相應(yīng)的控件
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中的布局就不必再寫(xiě)了,就一個(gè)item,最左邊一個(gè)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"/>
布局寫(xiě)完開(kāi)始寫(xiě)邏輯代碼
首先在adapter定義一個(gè)方法,以便在activity中拿到數(shù)據(jù)添加進(jìn)adapter中
public void notifyadapter(list mylivelist,boolean isadd){
if (!isadd){
this.mmylivelist=mylivelist;
}else {
this.mmylivelist.addall(mylivelist);
}
notifydatasetchanged();
}
然后在activity中拿到獲取到數(shù)據(jù)后調(diào)用adapter中的這個(gè)方法,添加數(shù)據(jù)
madapter.notifyadapter(data.getlist(), false);
在adapter中在判空,更有保證
public list getmylivelist(){
if (mmylivelist == null) {
mmylivelist =new arraylist<>();
}
return mmylivelist;
}
然后adapter中的getitemcount就直接拿到上面這個(gè)mmylivelist的大小就可以了
接下來(lái)開(kāi)始點(diǎn)擊編輯的時(shí)候顯示出imageview和recycleview中的底部全選反選部分
定義兩個(gè)變量
private static final int mylive_mode_check = 0;
private static final int mylive_mode_edit = 1;
//點(diǎn)擊編輯的時(shí)候顯示,順便調(diào)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);
//當(dāng)然,adapter中也有先關(guān)的變量在記錄
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); // 為了條目不復(fù)用
//顯示和隱藏
if (meditmode == mylive_mode_check) {
holder.mcheckbox.setvisibility(view.gone);
} else {
holder.mcheckbox.setvisibility(view.visible);
為了方便記錄選中的狀態(tài),在bean里面用個(gè)變量記起來(lái)
public boolean isselect;
public boolean isselect() {
return isselect;
}
public void setselect(boolean isselect) {
this.isselect = isselect;
}
//然后點(diǎn)擊條目選中和不選中的時(shí)候?yàn)閕mageview設(shè)置不同的圖片
if(mylive.isselect()) {
holder.mcheckbox.setimageresource(r.mipmap.ic_checked);
}else{
holder.mcheckbox.setimageresource(r.mipmap.ic_uncheck);
}
//在adapter中暴漏一個(gè)item的點(diǎn)擊事件的接口
public interface onswipelistener {
void onitemclicklistener(int pos,list mylivelist);
}
/*
在activity中的item點(diǎn)擊事件中,來(lái)操作imageview是否選中
*/
//用一個(gè)變量記錄
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();
/**
* 根據(jù)選擇的數(shù)量是否為0來(lái)判斷按鈕的是否可點(diǎn)擊.
*
* @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));
}
}
至于全選和反選的操作,就是遍歷這個(gè)bean類(lèi),得到他的選擇狀態(tài),重新設(shè)置就可以了.
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));
最后刪除的話(huà)就調(diào)刪除的接口,遍歷這個(gè)bean,判斷當(dāng)前的狀態(tài)如果是選中的狀態(tài),就刪除! 這樣就ok了 !!!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持萬(wàn)仟網(wǎng)。
總結(jié)
以上是生活随笔為你收集整理的android 批量查找view,Android Recyclerview实现多选,单选,全选,反选,批量删除的功能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux rc4,Linux kern
- 下一篇: diy一个android手机版下载,原神