LoadingAndRetryManager 回调机制深度解析:重试按钮点击事件这样写才优雅

发布时间:2026/8/21 14:48:24
LoadingAndRetryManager 回调机制深度解析:重试按钮点击事件这样写才优雅 LoadingAndRetryManager 回调机制深度解析重试按钮点击事件这样写才优雅【免费下载链接】LoadingAndRetryManager无缝为Activity、Fragment、任何View设置加载loading、重试(retry)和无数据empty页面。项目地址: https://gitcode.com/gh_mirrors/lo/LoadingAndRetryManagerLoadingAndRetryManager 是 Android 开发中一个非常轻巧的开源库它能无缝为 Activity、Fragment、任何 View 设置 loading加载中、retry重试和 empty无数据页面。很多新手在集成时最头疼的就是「重试按钮点击事件」到底该写在哪、怎么写才优雅。这篇文章将带你深度解析它的回调机制把重试按钮点击事件的正确写法一次讲透。为什么重试按钮点击事件是回调机制的核心用过 LoadingAndRetryManager 的朋友都知道它的核心 API 只有四个showLoading()显示加载中页面showContent()显示内容页showRetry()显示重试页面showEmpty()显示无数据页面但光会切换页面还不够——重试页面上的按钮必须由你亲自绑定点击事件否则用户点击「重试」毫无反应。而这个绑定动作正是通过 LoadingAndRetryManager 的回调机制完成的。回调机制的入口OnLoadingAndRetryListener 接口LoadingAndRetryManager 的整个回调机制都建立在 OnLoadingAndRetryListener.java 这个抽象类之上。它的方法不多但分工非常清晰回调方法职责setRetryEvent(View retryView)绑定重试页面的点击事件必须实现setLoadingEvent(View loadingView)绑定加载页面的自定义事件可选setEmptyEvent(View emptyView)绑定空页面的自定义事件可选generateRetryLayoutId()定制单个页面的重试布局可选其中setRetryEvent(View retryView)是唯一的抽象方法它接收的重试页面 View就是你在布局里定义的 retry 布局。重试按钮点击事件就写在这个方法里。重试按钮点击事件的标准写法Activity 场景以官方示例 MainActivity.java 为例完整流程只有两步第一步初始化时传入回调mLoadingAndRetryManager LoadingAndRetryManager.generate(this, new OnLoadingAndRetryListener() { Override public void setRetryEvent(View retryView) { MainActivity.this.setRetryEvent(retryView); } });第二步在 setRetryEvent 中绑定按钮public void setRetryEvent(View retryView) { View view retryView.findViewById(R.id.id_btn_retry); view.setOnClickListener(new View.OnClickListener() { Override public void onClick(View v) { Toast.makeText(MainActivity.this, retry event invoked, Toast.LENGTH_SHORT).show(); loadData(); // 重新加载数据 } }); }代码很简单但有两个关键点值得注意用retryView.findViewById而不是findViewByIdretry 布局是独立 inflate 出来的按钮必须从retryView里查找R.id.id_btn_retry定义在 base_retry.xml 中。点击后先showLoading()再重新加载数据这样用户点击重试后能立刻看到加载动画体验更连贯。Fragment 场景的重试写法逻辑完全一致LoadingAndRetryManager 的优雅之处在于Fragment 的用法与 Activity完全一致。参考 NormalFragment.javamLoadingAndRetryManager LoadingAndRetryManager.generate(this, new OnLoadingAndRetryListener() { Override public void setRetryEvent(View retryView) { NormalFragment.this.setRetryEvent(retryView); } });唯一的区别是generate()的第一个参数传入thisFragment 实例LoadingAndRetryManager 会自动识别并挂载到 Fragment 的根布局上。任意 View 场景的重试写法把 TextView 当主角这也是 LoadingAndRetryManager 最有特色的能力——任何 View 都可以套上加载/重试状态。参考 AnyViewTestActivity.javamTextView (TextView) findViewById(R.id.id_textview); mLoadingAndRetryManager LoadingAndRetryManager.generate(mTextView, new OnLoadingAndRetryListener() { Override public void setRetryEvent(View retryView) { retryRefreashTextView(retryView); } });给任意 View 添加 loading/retry 状态后重试按钮点击事件绑定逻辑不变一样是在setRetryEvent中完成。这意味着你可以让一个列表项、一张图片甚至任意自定义控件都拥有完整的加载重试能力。优雅写法的 3 个实用技巧 ✨技巧一把重试事件抽取为独立方法不要把业务逻辑直接写在匿名内部类里而是像官方示例那样抽一个setRetryEvent(View retryView)方法代码更清晰、可复用。技巧二点击后统一走「加载→数据请求→回调切换」链路public void onClick(View v) { mLoadingAndRetryManager.showLoading(); // 先显示加载页 loadData(); // 再发起请求 }请求成功后调用showContent()失败则调用showRetry()状态切换交给框架逻辑集中在数据层。技巧三全局统一重试布局局部覆盖在MyApplication中设置全局的BASE_RETRY_LAYOUT_ID让所有页面共享一套重试页如果某个页面需要特殊样式重写generateRetryLayoutId()即可。这样重试按钮点击事件的绑定代码可以做到全项目只写一次。避坑指南新手最容易踩的 2 个坑 ⚠️坑一忘了实现 setRetryEvent。它是抽象方法不实现无法编译但如果只写空实现重试按钮就是「死按钮」点击毫无反应。坑二按钮 id 从错误的对象中查找。记住一个原则retry 布局里的任何控件都从回调传入的retryView中查找别从 Activity 的findViewById找否则会得到null导致空指针。总结LoadingAndRetryManager 的回调机制设计得非常简洁所有页面事件统一收敛在OnLoadingAndRetryListener中重试按钮点击事件只需要在setRetryEvent(View retryView)里完成绑定。无论你的场景是 Activity、Fragment 还是任意 View这套写法都完全通用。掌握这个核心你就能用最少的代码写出体验流畅、逻辑清晰的加载重试页面。核心源码可以进一步阅读 LoadingAndRetryManager.java 和 LoadingAndRetryLayout.java理解状态切换的底层实现写起来会更得心应手。【免费下载链接】LoadingAndRetryManager无缝为Activity、Fragment、任何View设置加载loading、重试(retry)和无数据empty页面。项目地址: https://gitcode.com/gh_mirrors/lo/LoadingAndRetryManager创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考