摘要:先上效果圖該多級(jí)列表的優(yōu)勢(shì)支持無(wú)限級(jí)列表展開基于一個(gè)實(shí)現(xiàn)可以自定義每一級(jí)的樣式,定制化更強(qiáng)設(shè)計(jì)的思路數(shù)據(jù)結(jié)構(gòu)類中有變量構(gòu)造整體的數(shù)據(jù)源因?yàn)楸緛?lái)就支持多個(gè)的布局,不清楚的可以看下這個(gè)方法,所以我們可以利用這個(gè)類,來(lái)區(qū)分不同級(jí)用不同的。
先上效果圖:
支持無(wú)限級(jí)列表展開
基于一個(gè)recyclerView實(shí)現(xiàn)
可以自定義每一級(jí)item的樣式,定制化更強(qiáng)
2.設(shè)計(jì)的思路數(shù)據(jù)結(jié)構(gòu)List
因?yàn)镽ecyclerView.Adapter本來(lái)就支持多個(gè)type的item布局,不清楚的可以看下getItemViewType這個(gè)方法,所以我們可以利用這個(gè)類,來(lái)區(qū)分不同級(jí)用不同的Item。
將Item必須具備的方法放在一個(gè)Tree接口里面,以后自定義的類只需要繼承Tree接口就好了。
3.代碼分析public abstract class BaseTreeRVAdapterextends BaseRVAdapterV2 { @Override public void onBindViewHolder(T holder, final int position) { try { getLevel(position, mDatas, new PosBean()); } catch (StopMsgException ex) { int type = Integer.parseInt(ex.getMessage()); M tree = ex.getTree(); onBindViewHolder(type, tree, holder); } } @Override public int getItemViewType(int position) { try { getLevel(position, mDatas, new PosBean()); } catch (StopMsgException ex) { return Integer.parseInt(ex.getMessage()); } return 0; } @Override public int getItemCount() { return getTotal(mDatas); } protected abstract void onBindViewHolder(int type, M tree, T holder); public List getDatas() { return mDatas; } public void setDatas(List info) { if (info != null) { mDatas = info; } else { mDatas.clear(); } notifyDataSetChanged(); } }
注釋1:主要是計(jì)算當(dāng)前給的數(shù)據(jù)他的item個(gè)數(shù),會(huì)根據(jù)是否展開的狀態(tài)來(lái)統(tǒng)總個(gè)數(shù)
注釋2:計(jì)算當(dāng)前的postion對(duì)應(yīng)的item層級(jí),來(lái)顯示對(duì)應(yīng)的item布局
4.對(duì)于自己需要實(shí)現(xiàn)的地方public class TreeListAdapter extends BaseTreeRVAdapter{ @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view; RecyclerView.ViewHolder vh; switch (viewType) { case 0: ...... break; case 1: ...... break; case 2: ...... break; case 3: case 4: ...... } return vh; } @Override protected void onBindViewHolder(int type, final DiscountItem itemCategoryListBean, RecyclerView.ViewHolder holder) { switch (type) { case 0: ...... break; case 1: ...... break; case 2: ...... break; case 3: case 4: ...... } } }
上面的泛型T就是我們的Item的class類型,所以自定義的class要想用這個(gè)adapter的話,都需要實(shí)現(xiàn)Tree接口
onBindViewHolder方法中形參的的type就是層級(jí),比如說(shuō)第一級(jí)type就是0,第二級(jí)是1,以此類推
5.另外自定義的類如果不需要extends的話,那么需要繼承wellijohn.org.treerecyclerview.vo.TreeItem,如果已經(jīng)寫了的話,那么就需要自己實(shí)現(xiàn)Tree接口。必須實(shí)現(xiàn)的幾個(gè)方法:
int getLevel();//每個(gè)item的層級(jí),比如一級(jí)就是0,二級(jí)就返回1,這里的0和1可以自己定義,后面就是根據(jù)這個(gè)來(lái)選擇哪種樣式的item List6.引入方式getChilds();//返回的子列表,比如當(dāng)前類是一級(jí)的話,那么這個(gè)方法返回的是二級(jí)的列表數(shù)據(jù) boolean isExpand();//是否展開,true展開,false不展開,一般就是點(diǎn)擊下去修改這個(gè)值刷新adapter,就能達(dá)到展開還是折疊的目的了
step 1. Add it in your root build.gradle at the end of repositories: allprojects { repositories { ... maven { url "https://jitpack.io" } } } Step 2. Add the dependency dependencies { implementation "com.github.WelliJohn:MultiLevelRecyclerView:0.0.1" }7.demo示例
多級(jí)列表示例,如果覺得有用,還請(qǐng)點(diǎn)個(gè)贊。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/76800.html
摘要:數(shù)據(jù)源頻繁更新的場(chǎng)景,如彈幕等的優(yōu)勢(shì)會(huì)非常明顯進(jìn)一步來(lái)講,結(jié)論是列表頁(yè)展示界面,需要支持動(dòng)畫,或者頻繁更新,局部刷新,建議使用,更加強(qiáng)大完善,易擴(kuò)展其它情況如微信卡包列表頁(yè)兩者都,但在使用上會(huì)更加方便,快捷。 本文來(lái)自于騰訊bugly開發(fā)者社區(qū),非經(jīng)作者同意,請(qǐng)勿轉(zhuǎn)載,原文地址:http://dev.qq.com/topic/5811d... 作者:黃寧源 一,背景 RecyclerV...
閱讀 1824·2023-04-26 01:55
閱讀 1088·2021-09-30 09:47
閱讀 1683·2019-08-30 15:54
閱讀 749·2019-08-30 15:53
閱讀 701·2019-08-30 15:52
閱讀 1144·2019-08-30 15:44
閱讀 2418·2019-08-30 14:06
閱讀 1066·2019-08-29 16:39