怎么對稍微復(fù)雜點的 RecyclerView.Adapter 的開發(fā)

很多時候 APP 有些頁面,會有需要展示多個不同類型的數(shù)據(jù)都在一個頁面,而且數(shù)據(jù)是服務(wù)器動態(tài)返回的,順序也是不確定的。這時候我們就需要在 RecyclerView 的 Adapter 做一些對應(yīng)的處理。

這時候我們就需要在RecyclerView的Adapter做一些對應(yīng)的處理。

寫了個 Demo 放在了 Github 上:https://github.com/jeffreyxuworld/RecyclerViewAdapter

例子1:利用 getItemViewType,做不同 position 位置的處理。

    @Override
    public int getItemViewType(int position) {
        if (position == 0) {
            return SHOW_BANNER_AREA_TYPE;
        }else if(position == getItemCount() - 1){
            return SHOW_BOTTOM_AREA_TYPE;
        } else {
            if(novelLibraryBeans != null && novelLibraryBeans.size() > 0){
                if(position == getItemCount() - 2){
                    return SHOW_STYLE_TYPE_4;
                }else{
                    if(recmdsBeans.get(position - 1).style_type == 1){
                        return SHOW_STYLE_TYPE_1;
                    }else if(recmdsBeans.get(position - 1).style_type == 2){
                        return SHOW_STYLE_TYPE_2;
                    }else if(recmdsBeans.get(position - 1).style_type == 3){
                        return SHOW_STYLE_TYPE_3;
                    }
                }
            }else{
                if(recmdsBeans.get(position - 1).style_type == 1){
                    return SHOW_STYLE_TYPE_1;
                }else if(recmdsBeans.get(position - 1).style_type == 2){
                    return SHOW_STYLE_TYPE_2;
                }else if(recmdsBeans.get(position - 1).style_type == 3){
                    return SHOW_STYLE_TYPE_3;
                }
            }
        }
        return SHOW_BANNER_AREA_TYPE;
    }
Demo 截圖1

例子2:自定義 GridLayoutManager 的 getSpanSize,實現(xiàn)每行不同個數(shù)的布局。

        val imageAdapter = BannerAdapter(getData(6))
        val gridLayoutManager = GridLayoutManager(this, 2)
        gridLayoutManager.spanSizeLookup = object : SpanSizeLookup() {
            override fun getSpanSize(position: Int): Int {
                return if (imageAdapter.getItemViewType(position) == 2) {
                    2 //如果是長的圖,占2份的位置
                } else {
                    1
                }
            }
        }
        currentBinding.rvGrid.layoutManager = gridLayoutManager
        currentBinding.rvGrid.adapter = imageAdapter
Demo 截圖2
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容