最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android Recyclerview實現(xiàn)多選,單選,全選,反選,批量刪除的功能

 更新時間:2017年06月14日 11:04:10   作者:郭_昊  
本篇文章主要介紹了Android Recyclerview 實現(xiàn)多選,單選,全選,反選,批量刪除的功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下

效果圖如下:

這里寫圖片描述 

這里寫圖片描述 

這里寫圖片描述

Recyclerview 實現(xiàn)多選,單選,全選,反選,批量刪除的步驟

1.在Recyclerview布局中添加上底部的全選和反選按鈕,刪除按鈕,和計算數(shù)量等控件

2.這里選中的控件沒有用checkbox來做,用的是imageview,選中和不選中其實是兩張圖片

3.默認是不顯示選中的控件的,點擊編輯的時候顯示,點擊取消的時候隱藏

4.通過adapter和activity數(shù)據(jù)之間的傳遞,然后進行具體的操作

具體代碼如下:

在recyclerview的布局中寫全選,反選,刪除,計數(shù)等相應(yīng)的控件

 <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中拿到數(shù)據(jù)添加進adapter中

 public void notifyAdapter(List<MyLiveList.MyLive> myLiveList,boolean isAdd){
  if (!isAdd){
   this.mMyLiveList=myLiveList;
  }else {
   this.mMyLiveList.addAll(myLiveList);
  }
  notifyDataSetChanged();
 }

然后在activity中拿到獲取到數(shù)據(jù)后調(diào)用adapter中的這個方法,添加數(shù)據(jù)

 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;

//點擊編輯的時候顯示,順便調(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);

//當然,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里面用個變量記起來

 public boolean isSelect;
  public boolean isSelect() {
   return isSelect;
  }
  public void setSelect(boolean isSelect) {
   this.isSelect = isSelect;
  }
//然后點擊條目選中和不選中的時候為Imageview設(shè)置不同的圖片
   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();
 /**
  * 根據(jù)選擇的數(shù)量是否為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類,得到他的選擇狀態(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));

最后刪除的話就調(diào)刪除的接口,遍歷這個bean,判斷當前的狀態(tài)如果是選中的狀態(tài),就刪除! 這樣就OK了 !!!

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android開發(fā)準確獲取手機IP地址的兩種方式

    Android開發(fā)準確獲取手機IP地址的兩種方式

    這篇文章主要介紹了Android開發(fā)準確獲取手機IP地址的兩種方式,需要的朋友可以參考下
    2020-03-03
  • Qt6.5.3?Android環(huán)境配置的實現(xiàn)

    Qt6.5.3?Android環(huán)境配置的實現(xiàn)

    本文主要介紹了Qt6.5.3?Android環(huán)境配置的實現(xiàn),文中通過圖文介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2024-01-01
  • 淺談Android程序與JavaScript腳本的交互

    淺談Android程序與JavaScript腳本的交互

    這篇文章主要介紹了Android程序與JavaScript的腳本交互,利用js開發(fā)安卓應(yīng)用也是近來的熱門話題,特別是隨著Facebook的React Native的開源及對Android的官方支持,需要的朋友可以參考下
    2016-04-04
  • Kotlin擴展函數(shù)與運算符重載超詳細解析

    Kotlin擴展函數(shù)與運算符重載超詳細解析

    Kotlin可以為一個不能修改的或來自第三方庫中的類編寫一個新的函數(shù)。這個新增的函數(shù)就像那個原始類本來就有的函數(shù)一樣,可以用普通的方法調(diào)用,這種機制的函數(shù)稱為擴展函數(shù)
    2022-11-11
  • Android開發(fā)App啟動流程與消息機制詳解

    Android開發(fā)App啟動流程與消息機制詳解

    這篇文章主要為大家介紹了Android開發(fā)App啟動流程與消息機制詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Mac Android Studio安裝圖文教程

    Mac Android Studio安裝圖文教程

    本文主要介紹了Mac Android Studio安裝教程,文中通過圖文代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Android 8.0中一些坑以及對應(yīng)的解決方法

    Android 8.0中一些坑以及對應(yīng)的解決方法

    這篇文章主要給大家介紹了關(guān)于Android 8.0中一些坑以及對應(yīng)的解決方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2018-09-09
  • Android實現(xiàn)兩圓點之間來回移動加載進度

    Android實現(xiàn)兩圓點之間來回移動加載進度

    這篇文章主要為大家詳細介紹了Android實現(xiàn)兩圓點之間來回移動加載進度,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Android開發(fā)TextView內(nèi)的文字實現(xiàn)自動換行

    Android開發(fā)TextView內(nèi)的文字實現(xiàn)自動換行

    這篇文章主要為大家介紹了Android開發(fā)TextView內(nèi)的文字實現(xiàn)自動換行,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Android中實現(xiàn)滑動的七種方式總結(jié)

    Android中實現(xiàn)滑動的七種方式總結(jié)

    這篇文章主要介紹了Android中實現(xiàn)滑動的七種方式總結(jié),具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-02-02

最新評論

那坡县| 玉龙| 广平县| 株洲县| 赣州市| 武穴市| 积石山| 安阳市| 玛沁县| 嫩江县| 英山县| 金堂县| 天水市| 那曲县| 兖州市| 泸水县| 云龙县| 土默特左旗| 靖远县| 莫力| 依兰县| 郓城县| 白朗县| 罗平县| 白河县| 桃源县| 克东县| 兴隆县| 册亨县| 长顺县| 汨罗市| 滦平县| 壤塘县| 将乐县| 法库县| 奉节县| 壶关县| 阜新| 平原县| 平山县| 郯城县|