據(jù)布局的 3 種方式)
靈活定制 LoadingAndRetryManager為單個頁面打造專屬加載、重試與空數(shù)據(jù)布局的 3 種方式【免費下載鏈接】LoadingAndRetryManager無縫為Activity、Fragment、任何View設置加載loading、重試(retry)和無數(shù)據(jù)empty頁面。項目地址: https://gitcode.com/gh_mirrors/lo/LoadingAndRetryManagerLoadingAndRetryManager 是一個輕量級的 Android 開源庫能夠無縫地為 Activity、Fragment 以及任意 View 設置加載loading、重試retry和無數(shù)據(jù)empty頁面。默認情況下你可以在 Application 里配置一套全局通用的加載、重試與空數(shù)據(jù)布局讓所有頁面風格統(tǒng)一而當某個頁面需要與眾不同的表現(xiàn)時也無需大動干戈——只需重寫幾個回調(diào)方法。本文將用最簡單直白的方式為你拆解針對單個頁面定制專屬加載、重試與空數(shù)據(jù)布局的 3 種方式。先做全局默認配置一行搞定基礎加載重試布局在動手定制單頁面之前先認識一下全局配置。LoadingAndRetryManager 提供了三個靜態(tài)變量用于存放全局默認的布局 IDBASE_LOADING_LAYOUT_ID全局加載布局BASE_RETRY_LAYOUT_ID全局重試布局BASE_EMPTY_LAYOUT_ID全局空數(shù)據(jù)布局你可以在自定義 Application 的onCreate中統(tǒng)一賦值參考 MyApplication.javaLoadingAndRetryManager.BASE_RETRY_LAYOUT_ID R.layout.base_retry; LoadingAndRetryManager.BASE_LOADING_LAYOUT_ID R.layout.base_loading; LoadingAndRetryManager.BASE_EMPTY_LAYOUT_ID R.layout.base_empty;這樣所有頁面在沒有單獨定制時都會自動使用這套默認布局省心又統(tǒng)一。項目的默認重試布局 base_retry.xml 就是一個很好的參考模板。三種方式打造單頁面專屬的加載重試布局當某個頁面的加載、重試或空數(shù)據(jù)布局需要特殊設計時通過LoadingAndRetryManager.generate(activityOrFragmentOrView, listener)傳入自定義的OnLoadingAndRetryListener即可。所有定制邏輯都集中在 OnLoadingAndRetryListener.java 這個抽象類里。方式一返回布局 ID最省力的 XML 定制法這是最推薦新手使用的方式。你只需要在 XML 里寫好布局然后在回調(diào)中重寫generateLoadingLayoutId()、generateRetryLayoutId()、generateEmptyLayoutId()三個方法返回對應的布局 ID 即可。mLoadingAndRetryManager LoadingAndRetryManager.generate(this, new OnLoadingAndRetryListener() { Override public void setRetryEvent(View retryView) { } Override public int generateRetryLayoutId() { return R.layout.page_retry; // 專屬重試布局 } Override public int generateEmptyLayoutId() { return R.layout.page_empty; // 專屬空數(shù)據(jù)布局 } });內(nèi)部實現(xiàn)會自動通過LayoutInflater把布局 ID 渲染成 View對應源碼 LoadingAndRetryLayout.java 中的setRetryView(int layoutId)系列方法。只需寫 XML、返回 ID其余交給框架非常干凈。方式二返回 View 對象純代碼動態(tài)定制法如果布局需要在運行時動態(tài)生成或者你想完全用代碼構(gòu)建可以重寫generateLoadingLayout()、generateRetryLayout()、generateEmptyLayout()三個方法直接返回一個 View 對象。Override public View generateLoadingLayout() { TextView tv new TextView(MainActivity.this); tv.setText(頁面加載中請稍候...); tv.setGravity(Gravity.CENTER); return tv; }這種方式適合布局內(nèi)容依賴運行時數(shù)據(jù)、或者需要高度動態(tài)化的場景。值得注意的是當generateXxxLayoutId()返回NO_LAYOUT_ID時框架才會去調(diào)用對應的generateXxxLayout()二者是“ID 優(yōu)先”的取舍關系源碼邏輯清晰可見。方式三綁定專屬事件回調(diào)讓重試按鈕真正生效定制布局只是第一步讓“重試”按鈕真正觸發(fā)重新加載才是完整閉環(huán)。OnLoadingAndRetryListener提供了setRetryEvent(View retryView)、setLoadingEvent(View loadingView)、setEmptyEvent(View emptyView)三個事件回調(diào)。最常見的是在setRetryEvent中為按鈕綁定點擊事件Override public void setRetryEvent(View retryView) { retryView.findViewById(R.id.id_btn_retry) .setOnClickListener(v - loadData()); }完整示例可以參考 MainActivity.java點擊“重試”后重新發(fā)起請求并根據(jù)結(jié)果切換頁面狀態(tài)。頁面狀態(tài)切換四個 API 搞定所有場景定制好布局之后在任意時機包括子線程都可以通過以下四個方法切換頁面狀態(tài)源碼中已經(jīng)做了主線程安全處理見 LoadingAndRetryManager.javamLoadingAndRetryManager.showLoading()顯示加載中頁面mLoadingAndRetryManager.showContent()顯示真實內(nèi)容mLoadingAndRetryManager.showRetry()顯示重試頁面mLoadingAndRetryManager.showEmpty()顯示無數(shù)據(jù)頁面典型的請求流程就是請求發(fā)起時showLoading()成功后showContent()失敗后showRetry()數(shù)據(jù)為空時showEmpty()。不止 ActivityFragment 和任意 View 同樣適用LoadingAndRetryManager 最貼心的一點是generate()的第一個參數(shù)既可以傳 Activity也可以傳 Fragment甚至可以是任意 View。比如給一個 TextView 單獨加上加載重試能力只需傳入這個 View 本身即可參考 AnyViewTestActivity.javaLoadingAndRetryManager.generate(mTextView, new OnLoadingAndRetryListener() { ... });這樣哪怕是頁面中某一塊區(qū)域比如列表頭部、某個卡片也能擁有獨立的加載、重試與空數(shù)據(jù)布局粒度非常靈活。小結(jié)3 種定制方式怎么選定制場景推薦方式關鍵方法有現(xiàn)成 XML、追求快速方式一返回布局 IDgenerateXxxLayoutId()布局動態(tài)生成、純代碼實現(xiàn)方式二返回 ViewgenerateXxxLayout()需要綁定點擊等交互方式三事件回調(diào)setRetryEvent()等總的來說LoadingAndRetryManager 的定制思路非常統(tǒng)一全局配置打底、單頁回調(diào)覆蓋、事件回調(diào)補全交互。掌握這 3 種方式你就能為每個頁面靈活打造專屬的加載、重試與空數(shù)據(jù)布局告別手寫重復的狀態(tài)切換代碼讓 App 的狀態(tài)展示既統(tǒng)一又有個性。【免費下載鏈接】LoadingAndRetryManager無縫為Activity、Fragment、任何View設置加載loading、重試(retry)和無數(shù)據(jù)empty頁面。項目地址: https://gitcode.com/gh_mirrors/lo/LoadingAndRetryManager創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考