摘要:先上效果圖該多級列表的優(yōu)勢支持無限級列表展開基于一個實現(xiàn)可以自定義每一級的樣式,定制化更強設(shè)計的思路數(shù)據(jù)結(jié)構(gòu)類中有變量構(gòu)造整體的數(shù)據(jù)源因為本來就支持多個的布局,不清楚的可以看下這個方法,所以我們可以利用這個類,來區(qū)分不同級用不同的。
先上效果圖:
支持無限級列表展開
基于一個recyclerView實現(xiàn)
可以自定義每一級item的樣式,定制化更強
2.設(shè)計的思路數(shù)據(jù)結(jié)構(gòu)List
因為RecyclerView.Adapter本來就支持多個type的item布局,不清楚的可以看下getItemViewType這個方法,所以我們可以利用這個類,來區(qū)分不同級用不同的Item。
將Item必須具備的方法放在一個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:主要是計算當(dāng)前給的數(shù)據(jù)他的item個數(shù),會根據(jù)是否展開的狀態(tài)來統(tǒng)總個數(shù)
注釋2:計算當(dāng)前的postion對應(yīng)的item層級,來顯示對應(yīng)的item布局
4.對于自己需要實現(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要想用這個adapter的話,都需要實現(xiàn)Tree接口
onBindViewHolder方法中形參的的type就是層級,比如說第一級type就是0,第二級是1,以此類推
5.另外自定義的類如果不需要extends的話,那么需要繼承wellijohn.org.treerecyclerview.vo.TreeItem,如果已經(jīng)寫了的話,那么就需要自己實現(xiàn)Tree接口。必須實現(xiàn)的幾個方法:
int getLevel();//每個item的層級,比如一級就是0,二級就返回1,這里的0和1可以自己定義,后面就是根據(jù)這個來選擇哪種樣式的item List6.引入方式getChilds();//返回的子列表,比如當(dāng)前類是一級的話,那么這個方法返回的是二級的列表數(shù)據(jù) boolean isExpand();//是否展開,true展開,false不展開,一般就是點擊下去修改這個值刷新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示例
多級列表示例,如果覺得有用,還請點個贊。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/76800.html
摘要:數(shù)據(jù)源頻繁更新的場景,如彈幕等的優(yōu)勢會非常明顯進(jìn)一步來講,結(jié)論是列表頁展示界面,需要支持動畫,或者頻繁更新,局部刷新,建議使用,更加強大完善,易擴(kuò)展其它情況如微信卡包列表頁兩者都,但在使用上會更加方便,快捷。 本文來自于騰訊bugly開發(fā)者社區(qū),非經(jīng)作者同意,請勿轉(zhuǎn)載,原文地址:http://dev.qq.com/topic/5811d... 作者:黃寧源 一,背景 RecyclerV...
閱讀 1815·2023-04-26 01:55
閱讀 1078·2021-09-30 09:47
閱讀 1673·2019-08-30 15:54
閱讀 740·2019-08-30 15:53
閱讀 692·2019-08-30 15:52
閱讀 1133·2019-08-30 15:44
閱讀 2409·2019-08-30 14:06
閱讀 1057·2019-08-29 16:39