loadsir
LoadSir 是一个轻量级的 Android 状态管理框架,专注于处理页面在不同状态(如加载中、加载成功、加载失败、空数据等)的切换,尤其适合快速实现骨架屏、错误页、空页面等场景,避免了手动管理 View 可见性的繁琐逻辑。
一、核心优势
- 极简集成:通过注解 或 Builder 模式快速绑定状态布局,一行代码切换状态。
- 高度定制:支持默认提供的状态布局(加载、空、错误),可完全自定义布局样式和交互。
- 全局 / 局部管理:支持全局配置默认状态布局,也可针对单个页面定制特殊样式。
- 无侵入性:不影响原有业务逻辑,只需关注状态切换,适配
Activity、Fragment、View等场景。
二、基本用法(步骤)
- 添加依赖
在 build.gradle 中引入:
dependencies {implementation 'com.kingja.loadsir:loadsir:1.3.8' // 核心库}
- 定义状态布局(可选自定义)
- 默认状态:框架内置
LoadingCallback(加载中)、EmptyCallback(空数据)、ErrorCallback(加载失败),可直接使用。 - 自定义状态:如需自定义(如骨架屏、网络错误页),需继承
Callback并重写布局:
public class SkeletonCallback extends Callback {@Overrideprotected int onCreateView() {return R.layout.layout_skeleton; // 自定义骨架屏布局}// 可选:添加状态布局的点击事件(如错误页重试)@Overrideprotected void onViewCreate(Context context, View view) {
view.findViewById(R.id.btn_retry).setOnClickListener(v -> {// 触发重试逻辑(通过LoadSir回调)LoadSir.getDefault().getLoadLayout().showCallback(LoadingCallback.class);// 调用业务层的重试接口...});}}
- 初始化与绑定页面
在 Application 中全局配置(可选,也可在页面中单独配置):
public class App extends Application {@Overridepublic void onCreate() {super.onCreate();// 全局注册状态布局(后续页面可直接使用)LoadSir.beginBuilder().addCallback(new LoadingCallback()) // 加载中.addCallback(new EmptyCallback()) // 空数据.addCallback(new ErrorCallback()) // 错误.addCallback(new SkeletonCallback()) // 自定义骨架屏.setDefaultCallback(LoadingCallback.class) // 默认显示加载中.commit();}}
在页面中绑定目标 View(如 Activity 的 contentView 或 RecyclerView):
// 在Activity中@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);View contentView = LayoutInflater.from(this).inflate(R.layout.activity_main, null);// 绑定布局并获取LoadServiceLoadService loadService = LoadSir.getDefault().register(contentView, new Callback.OnReloadListener() {@Overridepublic void onReload(View v) {// 统一处理重试逻辑(如错误页点击重试)
loadService.showCallback(LoadingCallback.class);fetchData(); // 重新请求数据}});setContentView(loadService.getLoadLayout()); // 替换为LoadSir管理的布局// 初始加载数据fetchData();}
- 切换状态
数据加载过程中,通过 loadService 切换状态:
// 加载中
loadService.showCallback(LoadingCallback.class);// 加载成功(显示原内容)
loadService.showSuccess();// 空数据
loadService.showCallback(EmptyCallback.class);// 加载失败
loadService.showCallback(ErrorCallback.class);// 显示自定义骨架屏
loadService.showCallback(SkeletonCallback.class);
三、典型场景与优势
- 替代传统状态管理:无需在布局中嵌套多个
View(loadingView、errorView等),也无需手动调用setVisibility,通过LoadSir统一管理,代码更简洁。 - 骨架屏结合:将自定义的骨架屏布局作为一个
Callback,在数据请求开始时显示SkeletonCallback,加载完成后切换为Success,实现流畅过渡。 - 统一重试逻辑:通过
OnReloadListener集中处理各状态的重试操作(如错误页、空页面的 “重试” 按钮),避免重复代码。 - 适配复杂页面:支持绑定
Fragment、RecyclerView、ViewPager等,例如在RecyclerView加载数据时,先显示骨架屏列表,加载完成后切换为真实列表。
四、注意事项
- 布局层级:
LoadSir会将目标View包裹进一个父容器,可能轻微增加布局层级,对性能影响可忽略。 - 自定义交互:状态布局中的点击事件(如错误页的重试按钮),可在
Callback的onViewCreate中处理,或通过全局OnReloadListener统一处理。 - 版本兼容:最新版本(1.3.8)兼容 Android API 14+,适配绝大多数设备。
总结
LoadSir 是 Android 状态管理的 “利器”,尤其适合需要快速实现加载中、错误、空数据、骨架屏等状态切换的场景。它的核心价值在于简化状态管理逻辑,让开发者专注于业务而非布局切换细节,同时保持高度的自定义灵活性。
如果需要实现骨架屏,LoadSir 结合自定义 SkeletonCallback 是非常高效的方案,比手动控制 View 可见性更优雅。