使用RecyclerView實(shí)現(xiàn)無(wú)限層級(jí)可勾選的折疊樹形TreeView
本文主要通過(guò)RecyclerView實(shí)現(xiàn)一個(gè)TreeView效果的控件售担,該控件使用簡(jiǎn)單雏节,并且支持任意拓展到無(wú)限層級(jí)肠鲫。
首先鸟顺,需要先讓要顯示的Item繼承于BaseItem酷宵,BeseItem主要擁有樹形控件的邏輯操作屬性亥贸,像標(biāo)志是否被折疊展開了,以及子樹的節(jié)點(diǎn)容器等等浇垦。
示例程序中的Section僅僅只是繼承了BaseItem砌函,有其提起啊業(yè)務(wù)需求的可以自己增加屬性。
接下來(lái)我們就可以在Activity里面使用了溜族。
接下來(lái)在最主要的就是對(duì)helper的初始化了讹俊,SectionExpandHelper的構(gòu)造函數(shù)需要傳入recyclerView,這里使用了包裝設(shè)計(jì)模式煌抒,包裝設(shè)計(jì)模式的使用場(chǎng)景就在系統(tǒng)提供的類的功能不能滿足我們的需求的時(shí)候?qū)ζ溥M(jìn)行增強(qiáng)的一種方法仍劈。 然而,這不是我們關(guān)注的內(nèi)容寡壮,我們只需傳入這些參數(shù)即可使用贩疙。
IMultipleItem是一個(gè)回調(diào)接口讹弯,要實(shí)現(xiàn)這個(gè)層級(jí)樹最主要的工作就是復(fù)寫這個(gè)接口并復(fù)寫對(duì)應(yīng)的方。
我們?cè)賹?shí)現(xiàn)了IMultipleItem接口的匿名內(nèi)部類里面定義三個(gè)變量記住不用層級(jí)的控件的layoutID这溅,也就是說(shuō)需要多少層級(jí)的控件就定義多少xml嗎组民,這里我測(cè)試的時(shí)候只現(xiàn)實(shí)了三層級(jí)的控件,所有只定義了三個(gè)悲靴。
```
private static final intVIEW_TYPE_ITEM= R.layout.layout_item;
private static final intVIEW_TYPE_SECTION= R.layout.layout_section;
private static final intVIEW_TYPE_APK= R.layout.layout_apk;
```
在getItemLayout方法里面根據(jù)傳過(guò)來(lái)的baseItem判斷其具體實(shí)現(xiàn)并返回對(duì)應(yīng)的layoutID
同理
bindData方法中使用的ViewHolder為萬(wàn)能適配器臭胜,只要將View的id傳入就可以設(shè)置顯示的文本圖片等信息了。也可以通過(guò)view的id找到View癞尚。bindData中調(diào)用getItemLayout方法得到當(dāng)前顯示的item的視圖id耸三,然后對(duì)相應(yīng)的視圖進(jìn)行操作。
最后就是顯示效果了
到此為止就實(shí)現(xiàn)了折疊樹的實(shí)現(xiàn)了浇揩,并實(shí)現(xiàn)了單選多選的功能仪壮。本人第一次寫簡(jiǎn)書,寫得不好還望大家見諒胳徽。积锅。