使用RecyclerView實現(xiàn)無限層級可勾選的折疊樹形TreeView
本文主要通過RecyclerView實現(xiàn)一個TreeView效果的控件,該控件使用簡單,并且支持任意拓展到無限層級。
首先,需要先讓要顯示的Item繼承于BaseItem,BeseItem主要擁有樹形控件的邏輯操作屬性,像標(biāo)志是否被折疊展開了,以及子樹的節(jié)點容器等等。
示例程序中的Section僅僅只是繼承了BaseItem,有其提起啊業(yè)務(wù)需求的可以自己增加屬性。
接下來我們就可以在Activity里面使用了。
接下來在最主要的就是對helper的初始化了,SectionExpandHelper的構(gòu)造函數(shù)需要傳入recyclerView,這里使用了包裝設(shè)計模式,包裝設(shè)計模式的使用場景就在系統(tǒng)提供的類的功能不能滿足我們的需求的時候?qū)ζ溥M行增強的一種方法。 然而,這不是我們關(guān)注的內(nèi)容,我們只需傳入這些參數(shù)即可使用。
IMultipleItem是一個回調(diào)接口,要實現(xiàn)這個層級樹最主要的工作就是復(fù)寫這個接口并復(fù)寫對應(yīng)的方。
我們再實現(xiàn)了IMultipleItem接口的匿名內(nèi)部類里面定義三個變量記住不用層級的控件的layoutID,也就是說需要多少層級的控件就定義多少xml嗎,這里我測試的時候只現(xiàn)實了三層級的控件,所有只定義了三個。
```
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ù)傳過來的baseItem判斷其具體實現(xiàn)并返回對應(yīng)的layoutID
同理
bindData方法中使用的ViewHolder為萬能適配器,只要將View的id傳入就可以設(shè)置顯示的文本圖片等信息了。也可以通過view的id找到View。bindData中調(diào)用getItemLayout方法得到當(dāng)前顯示的item的視圖id,然后對相應(yīng)的視圖進行操作。
最后就是顯示效果了
到此為止就實現(xiàn)了折疊樹的實現(xiàn)了,并實現(xiàn)了單選多選的功能。本人第一次寫簡書,寫得不好還望大家見諒。。