解放雙手的列表[單選]、[多選]庫——CheckHelper v1.1

一 瞎扯淡

你還在爲列表[單選]、[多選]寫重複的邏輯嗎android

項目中常常性會碰到列表的單選、多選,實現起來好像也不難,可是最近項目有好多個須要單選/多選的頁面,看到設計稿的一瞬間,腦子靈光一閃,爲啥不把這些簡單而又繁瑣的邏輯給封裝起來呢(懶癌發做)?git

因而就有了下面的小東西(開源庫)...github

二 功能

1.功能

  • 普通單選
  • 普通多選
  • 預選中
  • 攔截器
  • ...

3.優勢

  • 簡單易用
  • 低耦合
  • 不用爲Bean添加額外字段
  • 沒有調用 Adapter.notifyItemChange方法,因此不會有閃屏Bug

三 使用

1.配置

Step 1. 在你項目的 Project (根目錄)的 build.gradle 文件添加下面配置:

allprojects {
		repositories {
			...
			maven { url 'https://jitpack.io' }
		}
	}
複製代碼

Step 2. 在須要使用的模塊下添加如下依賴bash

dependencies {
	        //Tag更換成最新的版本號,好比 1.1
	        implementation 'com.github.gminibird:CheckHelper:Tag'
	}
複製代碼

依賴包中依賴了RecyclerView,若是項目中已經使用了不一樣版本,可使用如下配置:app

dependencies {
	        //Tag更換成最新的版本號,好比 1.1
	        implementation 'com.github.gminibird:CheckHelper:Tag',{
	            exclude group: 'com.android.support'
	        }
	}
複製代碼

最後那個1.0是版本號,能夠上 GitHub 上看最新的,而後就能夠愉快的玩耍啦。maven

2.使用

  • 建立CheckHelper實例
    SingleCheckHelper mCheckHelper = new SingleCheckHelper();
    //or
    MultiCheckHelper mCheckHelper = new MultiCheckHelper();
    複製代碼
  • 註冊選擇器
    mCheckHelper.register(String.class, new CheckHelper.Checker<String, LwViewHolder>() 
    @Override
    public void check(String s, LwViewHolder holder) {
        //選中狀態
        holder.itemView.setBackgroundColor(0xFF73E0E4); //藍色
        holder.setChecked(R.id.checkbox, true);
    }
    @Override
    public void unCheck(String s, LwViewHolder holder) {
        //非選中狀態
        holder.itemView.setBackgroundColor(0xFFFFFFFF);  //白色
        holder.setChecked(R.id.checkbox, false);
    }
    });
    複製代碼
  • 綁定到Adapter中
    @Override
    protected void onBind(@NonNull LwViewHolder holder, @NonNull String item) {
        //這裏用了本身封裝的Adapter,至關於onBindViewHolder方法
        mCheckHelper.bind(item, holder, holder.itemView);
    }
    複製代碼

而後,而後就完成了。。。運行就能夠看到想要的效果,選中的數據能夠調用相應CheckHelper實例的getXXX()獲取。ide

四 效果

廢話少說,先上圖:post

1.左到右分別爲 單選->多選->攔截器

五 Api

1. CheckHelper (基類)

返回值 方法 說明
void register(Class, Checker) 註冊Checker,提供選中以及非選中狀態
void bind(Object, ViewHolder) 綁定,沒有指定點擊View,須要額外設置點擊事件,並主動調用select()方法
void bind(Object,ViewHolder, @IdRes int) 綁定,並指定觸發事件的 View id
void bind(Object,ViewHolder, View) 綁定,並指定觸發事件的 View
void bind(Object, ViewHolder, boolean) 手動綁定
void select(Object, ViewHolder) 手動選擇(狀態值非當前狀態的相反值)
void select(Object, ViewHolder, boolean) 手動選擇(可設置狀態)
void addOnCheckListener(Class,OnCheckListene) 添加check監聽(觸發條件爲bind監聽與select監聽的並集)
void addOnSelectListener(Class,OnSelectListener) 添加select監聽(點擊時調用)
void addOnBindListener(Class,onBindListener) 添加bind監聽(onBindViewHolder調用時調用)
void addInterceptor(Interceptor interceptor) 添加攔截器
boolean isChecked(Object,ViewHolder) 判斷當前實例是否選中
boolean hasChecked() 判斷是否至少選中一個
void add(Object) 添加默認選中
void remove(Object) 刪除選中
T getChecked() 獲取全部選中

2. SingleCheckHelper(單選)

返回值 方法 說明
void setCanCancel(booleanl) 設置是否能夠取消

3. MultiCheckHelper(多選)

返回值 方法 說明
Set getChecked(Class) 獲取指定類型的全部選中
boolean isAllChecked(List<?>) 指定列表是否所有選中
boolean isAllChecked(List<?>, Class) 指定列表裏面的指定類型是否所有選中
void checkAll(Map<?,ViewHolder>) 選擇所有(指定數據)
void checkAll(List<?>, Adapter) 選擇所有(指定數據)
void unCheckAll(Adapter adapter) 取消所有選中
void unCheckAll(Adapter adapter, Class, List) 取消所有選中(指定數據)
void unCheckAll(Adapter, Class) 取消所有選中(指定數據,指定類型)


written by gminibirdgradle

源碼戳上面 ^^^ui

做者介紹

  • 曾榮基:廣州蘆葦科技 APP 團隊 Android 開發工程師

內推信息

  • 咱們正在招募小夥伴,有興趣的小夥伴能夠把簡歷發到 app@talkmoney.cn,備註:來自掘金社區
  • 詳情能夠戳這裏--> 廣州蘆葦信息科技
相關文章
相關標籤/搜索