解放雙手的列表[單選]季率、[多選]庫(kù)——CheckHelper v1.1

一 瞎扯淡

你還在為列表[單選]、[多選]寫(xiě)重復(fù)的邏輯嗎

項(xiàng)目中經(jīng)常性會(huì)碰到列表的單選描沟、多選飒泻,實(shí)現(xiàn)起來(lái)好像也不難,但是最近項(xiàng)目有好多個(gè)需要單選/多選的頁(yè)面吏廉,看到設(shè)計(jì)稿的一瞬間泞遗,腦子靈光一閃,為啥不把這些簡(jiǎn)單而又繁瑣的邏輯給封裝起來(lái)呢(懶癌發(fā)作)迟蜜?

于是就有了下面的小東西(開(kāi)源庫(kù))...

二 功能

1.功能

  • 普通單選
  • 普通多選
  • 預(yù)選中
  • 攔截器
  • ...

3.優(yōu)點(diǎn)

  • 簡(jiǎn)單易用
  • 低耦合
  • 不用為Bean添加額外字段
  • 沒(méi)有調(diào)用 Adapter.notifyItemChange方法刹孔,所以不會(huì)有閃屏Bug

三 使用

1.配置

[圖片上傳失敗...(image-c19eda-1552441902508)]
Step 1. 在你項(xiàng)目的 Project (根目錄)的 build.gradle 文件添加下面配置:

    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }

Step 2. 在需要使用的模塊下添加以下依賴(lài)

    dependencies {
            //Tag更換成最新的版本號(hào),比如 1.1
            implementation 'com.github.gminibird:CheckHelper:Tag'
    }

依賴(lài)包中依賴(lài)了RecyclerView娜睛,如果項(xiàng)目中已經(jīng)使用了不同版本髓霞,可以使用以下配置:

    dependencies {
            //Tag更換成最新的版本號(hào),比如 1.1
            implementation 'com.github.gminibird:CheckHelper:Tag',{
                exclude group: 'com.android.support'
            }
    }

最后那個(gè)1.0是版本號(hào)畦戒,可以上 GitHub 上看最新的方库,然后就可以愉快的玩耍啦。

2.使用

  • 創(chuàng)建CheckHelper實(shí)例
    SingleCheckHelper mCheckHelper = new SingleCheckHelper();
    //or
    MultiCheckHelper mCheckHelper = new MultiCheckHelper();
    
  • 注冊(cè)選擇器
    mCheckHelper.register(String.class, new CheckHelper.Checker<String, LwViewHolder>() 
    @Override
    public void check(String s, LwViewHolder holder) {
        //選中狀態(tài)
        holder.itemView.setBackgroundColor(0xFF73E0E4); //藍(lán)色
        holder.setChecked(R.id.checkbox, true);
    }
    @Override
    public void unCheck(String s, LwViewHolder holder) {
        //非選中狀態(tài)
        holder.itemView.setBackgroundColor(0xFFFFFFFF);  //白色
        holder.setChecked(R.id.checkbox, false);
    }
    });
    
  • 綁定到Adapter中
    @Override
    protected void onBind(@NonNull LwViewHolder holder, @NonNull String item) {
        //這里用了自己封裝的Adapter障斋,相當(dāng)于onBindViewHolder方法
        mCheckHelper.bind(item, holder, holder.itemView);
    }
    

然后纵潦,然后就完成了。垃环。邀层。運(yùn)行就可以看到想要的效果,選中的數(shù)據(jù)可以調(diào)用相應(yīng)CheckHelper實(shí)例的getXXX()獲取遂庄。

四 效果

廢話(huà)少說(shuō)寥院,先上圖:

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

<center>
<img src="https://user-gold-cdn.xitu.io/2019/1/27/1688e64e15aa79dc?w=374&h=607&f=gif&s=1047346" width ="240">
<img src="https://user-gold-cdn.xitu.io/2019/1/27/1688e65eea8cb4ed?w=374&h=607&f=gif&s=1119303"
width ="240">
<img src="https://user-gold-cdn.xitu.io/2019/2/25/169235cacfe71475?w=368&h=598&f=gif&s=1349327"
width ="240">
</center>

五 Api

1. CheckHelper (基類(lèi))

返回值 方法 說(shuō)明
void register(Class, Checker) 注冊(cè)Checker,提供選中以及非選中狀態(tài)
void bind(Object, ViewHolder) 綁定涛目,沒(méi)有指定點(diǎn)擊View秸谢,需要額外設(shè)置點(diǎn)擊事件凛澎,并主動(dòng)調(diào)用select()方法
void bind(Object,ViewHolder, @IdRes int) 綁定,并指定觸發(fā)事件的 View id
void bind(Object,ViewHolder, View) 綁定估蹄,并指定觸發(fā)事件的 View
void bind(Object, ViewHolder, boolean) 手動(dòng)綁定
void select(Object, ViewHolder) 手動(dòng)選擇(狀態(tài)值非當(dāng)前狀態(tài)的相反值)
void select(Object, ViewHolder, boolean) 手動(dòng)選擇(可設(shè)置狀態(tài))
void addOnCheckListener(Class,OnCheckListene) 添加check監(jiān)聽(tīng)(觸發(fā)條件為bind監(jiān)聽(tīng)與select監(jiān)聽(tīng)的并集)
void addOnSelectListener(Class,OnSelectListener) 添加select監(jiān)聽(tīng)(點(diǎn)擊時(shí)調(diào)用)
void addOnBindListener(Class,onBindListener) 添加bind監(jiān)聽(tīng)(onBindViewHolder調(diào)用時(shí)調(diào)用)
void addInterceptor(Interceptor interceptor) 添加攔截器
boolean isChecked(Object,ViewHolder) 判斷當(dāng)前實(shí)例是否選中
boolean hasChecked() 判斷是否至少選中一個(gè)
void add(Object) 添加默認(rèn)選中
void remove(Object) 刪除選中
T getChecked() 獲取所有選中

2. SingleCheckHelper(單選)

返回值 方法 說(shuō)明
void setCanCancel(booleanl) 設(shè)置是否可以取消

3. MultiCheckHelper(多選)

返回值 方法 說(shuō)明
Set<T> getChecked(Class<T>) 獲取指定類(lèi)型的所有選中
boolean isAllChecked(List<?>) 指定列表是否全部選中
boolean isAllChecked(List<?>, Class<T>) 指定列表里面的指定類(lèi)型是否全部選中
void checkAll(Map<?,ViewHolder>) 選擇全部(指定數(shù)據(jù))
void checkAll(List<?>, Adapter) 選擇全部(指定數(shù)據(jù))
void unCheckAll(Adapter adapter) 取消全部選中
void unCheckAll(Adapter adapter, Class<T>, List<T>) 取消全部選中(指定數(shù)據(jù))
void unCheckAll(Adapter, Class) 取消全部選中(指定數(shù)據(jù)塑煎,指定類(lèi)型)




written by gminibird

源碼戳上面 ^^^

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市臭蚁,隨后出現(xiàn)的幾起案子最铁,更是在濱河造成了極大的恐慌,老刑警劉巖垮兑,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炭晒,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡甥角,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門(mén)识樱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)嗤无,“玉大人,你說(shuō)我怎么就攤上這事怜庸〉狈福” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵割疾,是天一觀(guān)的道長(zhǎng)嚎卫。 經(jīng)常有香客問(wèn)我,道長(zhǎng)宏榕,這世上最難降的妖魔是什么拓诸? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮麻昼,結(jié)果婚禮上奠支,老公的妹妹穿的比我還像新娘。我一直安慰自己抚芦,他們只是感情好倍谜,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著叉抡,像睡著了一般尔崔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上褥民,一...
    開(kāi)封第一講書(shū)人閱讀 49,730評(píng)論 1 289
  • 那天季春,我揣著相機(jī)與錄音,去河邊找鬼轴捎。 笑死鹤盒,一個(gè)胖子當(dāng)著我的面吹牛蚕脏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播侦锯,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼驼鞭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了尺碰?” 一聲冷哼從身側(cè)響起挣棕,我...
    開(kāi)封第一講書(shū)人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎亲桥,沒(méi)想到半個(gè)月后洛心,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡题篷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年词身,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片番枚。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡法严,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出葫笼,到底是詐尸還是另有隱情深啤,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布路星,位于F島的核電站溯街,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏洋丐。R本人自食惡果不足惜呈昔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望友绝。 院中可真熱鬧韩肝,春花似錦、人聲如沸九榔。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)哲泊。三九已至剩蟀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間切威,已是汗流浹背育特。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缰冤。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓犬缨,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親棉浸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子怀薛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 喧鬧過(guò)后,終歸平靜迷郑。 靜下來(lái)能聽(tīng)到花綻放的聲音枝恋。 靜下來(lái)能聽(tīng)到樹(shù)喝水的聲音。 靜下來(lái)大自然會(huì)給予你更多美妙的聲音嗡害。...
    金穗_ec4b閱讀 1,047評(píng)論 10 40
  • 今天學(xué)習(xí)會(huì)焚碌,錢(qián)總主要講了兩個(gè)概念,第一霸妹,就是將來(lái)車(chē)間里里會(huì)用操作工代替機(jī)修工十电,及管理,第二叹螟,學(xué)習(xí)文化及各項(xiàng)技術(shù)摆出,必...
    順其自然_6a01閱讀 327評(píng)論 0 0
  • 泰戈?duì)栒f(shuō):“任憑東走西顧,逝去的必然不返首妖。”轉(zhuǎn)眼間與小白營(yíng)緣分將盡爷恳,或許它將定格在回憶里隨風(fēng)飄散再不回頭有缆,但...
    忘憂(yōu)居士閱讀 578評(píng)論 3 6
  • 01. 以前的我栈虚,心軟又天真 從前袖外,我太在乎別人的眼光,生怕自己做錯(cuò)事魂务,說(shuō)錯(cuò)話(huà)曼验,失去別人的好感,可是我發(fā)現(xiàn)粘姜,我錯(cuò)了...
    撿書(shū)先生說(shuō)閱讀 2,524評(píng)論 9 76
  • 129期直選大底105注開(kāi) 004 006 007 014 017 040 041 044 060 068 070...
    你開(kāi)心我快樂(lè)888閱讀 315評(píng)論 0 0