打造RecyclerView的n級列表

先上效果圖:
打造RecyclerView的n級列表cdn.xitu.io/2018/8/20/165560462c7326fe?w=282&h=500&f=gif&s=549336">

成都創(chuàng)新互聯(lián)公司咨詢熱線:028-86922220,為您提供成都網(wǎng)站建設(shè)網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),成都創(chuàng)新互聯(lián)公司網(wǎng)頁制作領(lǐng)域十年,包括成都展覽展示等多個(gè)領(lǐng)域擁有多年設(shè)計(jì)經(jīng)驗(yàn),選擇成都創(chuàng)新互聯(lián)公司,為企業(yè)錦上添花!

1.該多級列表的優(yōu)勢:

  1. 支持無限級列表展開
  2. 基于一個(gè)recyclerView實(shí)現(xiàn)
  3. 可以自定義每一級item的樣式,定制化更強(qiáng)

2.設(shè)計(jì)的思路

  1. 數(shù)據(jù)結(jié)構(gòu)List<ItemBean>,ItemBean類中有變量List<ItemBean>,構(gòu)造整體RecyclerView的數(shù)據(jù)源
  2. 因?yàn)镽ecyclerView.Adapter本來就支持多個(gè)type的item布局,不清楚的可以看下getItemViewType這個(gè)方法,所以我們可以利用這個(gè)類,來區(qū)分不同級用不同的Item。
  3. 將Item必須具備的方法放在一個(gè)Tree接口里面,以后自定義的類只需要繼承Tree接口就好了。

3.代碼分析

public abstract class BaseTreeRVAdapter<T extends RecyclerView.ViewHolder, M extends Tree> extends BaseRVAdapterV2<T, M> {

    @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<M> getDatas() {
        return mDatas;
    }

    public void setDatas(List<M> info) {
        if (info != null) {
            mDatas = info;
        } else {
            mDatas.clear();
        }
        notifyDataSetChanged();
    }
}

注釋1:主要是計(jì)算當(dāng)前給的數(shù)據(jù)他的item個(gè)數(shù),會根據(jù)是否展開的狀態(tài)來統(tǒng)總個(gè)數(shù)
注釋2:計(jì)算當(dāng)前的postion對應(yīng)的item層級,來顯示對應(yīng)的item布局

4.對于自己需要實(shí)現(xiàn)的地方

public class TreeListAdapter extends BaseTreeRVAdapter<RecyclerView.ViewHolder, T extends Tree> {

    @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:
            ......
        }
    }
}
  1. 上面的泛型T就是我們的Item的class類型,所以自定義的class要想用這個(gè)adapter的話,都需要實(shí)現(xiàn)Tree接口
  2. onBindViewHolder方法中形參的的type就是層級,比如說第一級type就是0,第二級是1,以此類推

5.另外自定義的類如果不需要extends的話,那么需要繼承wellijohn.org.treerecyclerview.vo.TreeItem,如果已經(jīng)寫了的話,那么就需要自己實(shí)現(xiàn)Tree接口。

必須實(shí)現(xiàn)的幾個(gè)方法:

    int getLevel();//每個(gè)item的層級,比如一級就是0,二級就返回1,這里的0和1可以自己定義,后面就是根據(jù)這個(gè)來選擇哪種樣式的item

    List<T> getChilds();//返回的子列表,比如當(dāng)前類是一級的話,那么這個(gè)方法返回的是二級的列表數(shù)據(jù)

    boolean isExpand();//是否展開,true展開,false不展開,一般就是點(diǎn)擊下去修改這個(gè)值刷新adapter,就能達(dá)到展開還是折疊的目的了

6.引入方式

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示例

多級列表示例,如果覺得有用,還請點(diǎn)個(gè)贊。

分享題目:打造RecyclerView的n級列表
路徑分享:http://muchs.cn/article40/ghjieo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、企業(yè)建站、服務(wù)器托管、網(wǎng)頁設(shè)計(jì)公司、手機(jī)網(wǎng)站建設(shè)、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司