針對RecyclerView的多狀態(tài)布局管理方案

RecyclerViewStatus,一款針對RecyclerView的多狀態(tài)布局管理開源框架

開發(fā)中經(jīng)常會遇到列表的空、加載、錯誤等狀態(tài)的切換需求。而市面上針對RecyclerView的多狀態(tài)管理大概有以下兩種方案

  1. 在RecyclerView的上層節(jié)點(diǎn)添加新的父控件,當(dāng)需要顯示為內(nèi)容布局的時候則將RecyclerView進(jìn)行顯示;當(dāng)顯示其他狀態(tài)布局的時候則將RecyclerView隱藏并顯示對應(yīng)的容器

  2. 直接在RecyclerView的Adapter中定義多中itemViewType,然后在onBindViewHolder中判斷其itemViewType,再進(jìn)行相應(yīng)的處理。

兩種方法都有一些弊端,第一種方法的問題在于:由于添加了新的節(jié)點(diǎn)所以并不適用于某些特定的布局結(jié)構(gòu);而第二種方法由于侵入了原本的業(yè)務(wù)代碼導(dǎo)致adapter身兼多職,代碼維護(hù)效率極差。

那有沒有一種更好的方式,能在不影響布局層級的前提下兼顧維護(hù)效率?

本框架就是為此而生,并且使用理念極其簡單:

以下為使用文檔

在你的Activity/Fragment中直接創(chuàng)建RecyclerViewStatus作為成員變量

`

    RecyclerViewStatus recyclerViewStatus = new RecyclerViewStatus();

`

PS:正式使用前確保 recyclerView已調(diào)用 setAdapter 和 setLayoutManager

`

    //確保recyclerView setAdapter和setLayoutManager后調(diào)用attachToRecyclerView
    recyclerViewStatus.attachToRecyclerView(recyclerView);

`

構(gòu)造您所需要的StateInflate即完成全部狀態(tài)的初始化

首個參數(shù)為狀態(tài)id(自定義),第二個參數(shù)為布局id,第三個等同于onBindViewHolder的回調(diào)(可忽略)

`

    recyclerViewStatus.initStates(Arrays.asList(
            new StateInflate("empty",R.layout.empty_layout),
            new StateInflate<String>("error", R.layout.error_layout, new StateInflate.Block<String>() {
                @Override
                public void onBind(StateAdapter.StateViewHolder viewHolder, String s) {
                    viewHolder.getTextView(R.id.errorText).setText(s);
                }
            }),
            new StateInflate("loading",R.layout.loading_layout)
    ));

`

接下來,只需要在你業(yè)務(wù)需要的場合調(diào)用showContent或者showState,即可切換至不同的狀態(tài)

`

    //顯示原內(nèi)容
    recyclerViewStatus.showContent();

    //顯示加載狀態(tài)
    recyclerViewStatus.showState("loading");
    
    //顯示錯誤狀態(tài)
    recyclerViewStatus.showState("error","網(wǎng)絡(luò)異常,無法獲取網(wǎng)絡(luò)");

`

實(shí)現(xiàn)原理

RecyclerViewStatus底層是基于切換recyclerView的Adapter和LayoutManager實(shí)現(xiàn)內(nèi)容布局到狀態(tài)布局的切換,并且在內(nèi)部管理了一個ConcatAdapter,動態(tài)add或remove對應(yīng)狀態(tài)的Adapter,從而實(shí)現(xiàn)具體狀態(tài)的切換。

傳送門
XXQAQ/RecyclerViewStatus: 針對RecyclerView的多狀態(tài)布局管理方案 (github.com)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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