ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

灵活定制 LoadingAndRetryManager:为单个页面打造专属加载、重试与空数据布局的 3 种方式

灵活定制 LoadingAndRetryManager:为单个页面打造专属加载、重试与空数据布局的 3 种方式 灵活定制 LoadingAndRetryManager为单个页面打造专属加载、重试与空数据布局的 3 种方式【免费下载链接】LoadingAndRetryManager无缝为Activity、Fragment、任何View设置加载loading、重试(retry)和无数据empty页面。项目地址: https://gitcode.com/gh_mirrors/lo/LoadingAndRetryManagerLoadingAndRetryManager 是一个轻量级的 Android 开源库能够无缝地为 Activity、Fragment 以及任意 View 设置加载loading、重试retry和无数据empty页面。默认情况下你可以在 Application 里配置一套全局通用的加载、重试与空数据布局让所有页面风格统一而当某个页面需要与众不同的表现时也无需大动干戈——只需重写几个回调方法。本文将用最简单直白的方式为你拆解针对单个页面定制专属加载、重试与空数据布局的 3 种方式。先做全局默认配置一行搞定基础加载重试布局在动手定制单页面之前先认识一下全局配置。LoadingAndRetryManager 提供了三个静态变量用于存放全局默认的布局 IDBASE_LOADING_LAYOUT_ID全局加载布局BASE_RETRY_LAYOUT_ID全局重试布局BASE_EMPTY_LAYOUT_ID全局空数据布局你可以在自定义 Application 的onCreate中统一赋值参考 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;这样所有页面在没有单独定制时都会自动使用这套默认布局省心又统一。项目的默认重试布局 base_retry.xml 就是一个很好的参考模板。三种方式打造单页面专属的加载重试布局当某个页面的加载、重试或空数据布局需要特殊设计时通过LoadingAndRetryManager.generate(activityOrFragmentOrView, listener)传入自定义的OnLoadingAndRetryListener即可。所有定制逻辑都集中在 OnLoadingAndRetryListener.java 这个抽象类里。方式一返回布局 ID最省力的 XML 定制法这是最推荐新手使用的方式。你只需要在 XML 里写好布局然后在回调中重写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; // 专属空数据布局 } });内部实现会自动通过LayoutInflater把布局 ID 渲染成 View对应源码 LoadingAndRetryLayout.java 中的setRetryView(int layoutId)系列方法。只需写 XML、返回 ID其余交给框架非常干净。方式二返回 View 对象纯代码动态定制法如果布局需要在运行时动态生成或者你想完全用代码构建可以重写generateLoadingLayout()、generateRetryLayout()、generateEmptyLayout()三个方法直接返回一个 View 对象。Override public View generateLoadingLayout() { TextView tv new TextView(MainActivity.this); tv.setText(页面加载中请稍候...); tv.setGravity(Gravity.CENTER); return tv; }这种方式适合布局内容依赖运行时数据、或者需要高度动态化的场景。值得注意的是当generateXxxLayoutId()返回NO_LAYOUT_ID时框架才会去调用对应的generateXxxLayout()二者是“ID 优先”的取舍关系源码逻辑清晰可见。方式三绑定专属事件回调让重试按钮真正生效定制布局只是第一步让“重试”按钮真正触发重新加载才是完整闭环。OnLoadingAndRetryListener提供了setRetryEvent(View retryView)、setLoadingEvent(View loadingView)、setEmptyEvent(View emptyView)三个事件回调。最常见的是在setRetryEvent中为按钮绑定点击事件Override public void setRetryEvent(View retryView) { retryView.findViewById(R.id.id_btn_retry) .setOnClickListener(v - loadData()); }完整示例可以参考 MainActivity.java点击“重试”后重新发起请求并根据结果切换页面状态。页面状态切换四个 API 搞定所有场景定制好布局之后在任意时机包括子线程都可以通过以下四个方法切换页面状态源码中已经做了主线程安全处理见 LoadingAndRetryManager.javamLoadingAndRetryManager.showLoading()显示加载中页面mLoadingAndRetryManager.showContent()显示真实内容mLoadingAndRetryManager.showRetry()显示重试页面mLoadingAndRetryManager.showEmpty()显示无数据页面典型的请求流程就是请求发起时showLoading()成功后showContent()失败后showRetry()数据为空时showEmpty()。不止 ActivityFragment 和任意 View 同样适用LoadingAndRetryManager 最贴心的一点是generate()的第一个参数既可以传 Activity也可以传 Fragment甚至可以是任意 View。比如给一个 TextView 单独加上加载重试能力只需传入这个 View 本身即可参考 AnyViewTestActivity.javaLoadingAndRetryManager.generate(mTextView, new OnLoadingAndRetryListener() { ... });这样哪怕是页面中某一块区域比如列表头部、某个卡片也能拥有独立的加载、重试与空数据布局粒度非常灵活。小结3 种定制方式怎么选定制场景推荐方式关键方法有现成 XML、追求快速方式一返回布局 IDgenerateXxxLayoutId()布局动态生成、纯代码实现方式二返回 ViewgenerateXxxLayout()需要绑定点击等交互方式三事件回调setRetryEvent()等总的来说LoadingAndRetryManager 的定制思路非常统一全局配置打底、单页回调覆盖、事件回调补全交互。掌握这 3 种方式你就能为每个页面灵活打造专属的加载、重试与空数据布局告别手写重复的状态切换代码让 App 的状态展示既统一又有个性。【免费下载链接】LoadingAndRetryManager无缝为Activity、Fragment、任何View设置加载loading、重试(retry)和无数据empty页面。项目地址: https://gitcode.com/gh_mirrors/lo/LoadingAndRetryManager创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表