九分靠谱的加载反馈框架LoadSir
来源:互联网 发布:陈国良院士 知乎 编辑:程序博客网 时间:2024/06/05 20:18
九分靠谱的加载反馈框架LoadSir
LoadSir
是一个高效易用,低碳环保,扩展性良好的加载反馈页管理框架,在加载网络或其他数据时候,根据需求切换状态页面,可添加自定义状态页面,如加载中,加载失败,无数据,网络超时,如占位图,登录失效等常用页面。可配合网络加载框架,结合返回状态码,错误码,数据进行状态页自动切换,封装使用效果更佳。。Github传送门
效果预览
使用场景
下面为大家常见的加载反馈页面:
面对这么多状态页面,你是不是还在用include的方式,setVisibility(View.VISIBLE/GONE),这种方式即不方便控制,也造成了视图层级冗余(你要把所有状态布局include进一个视图)。如果有一种工具,能把这些事都做了就好了。恰好,LoadSir
把这些事做了,接下来我们就来了解一下它。
LoadSir的功能及特点
- 支持Activity,Fragment,Fragment(v4),View状态回调
- 适配多个Fragment切换,及Fragment+ViewPager切换,不会状态叠加或者状态错乱
- 利用泛型转换输入信号和输出状态,可根据网络返回体的状态码或者数据返回自动适配状态页,实现全局自动状态切换
- 只加载唯一一个状态视图,不会预加载全部视图
- 可设置重新加载点击事件(OnReloadListener)
- 可自定义状态页(继承Callback类)
- 可在子线程直接切换状态
- 可设置初始状态页(常用进度页作为初始状态)
- 不需要设置枚举或者常量状态值,直接用状态页类类型(xxx.class)作为状态码
- 可扩展状态页面,在配置中添加自定义状态页
- 可对单个状态页单独设置点击事件,根据返回boolean值覆盖或者结合OnReloadListener使用
- 可全局单例配置,也可以单独配置
- 无预设页面,低解耦,开发者随心配置
开始使用LoadSir
LoadSir的使用只需要简单的三步,三步上篮的三步。
添加依赖
compile 'com.kingja.loadsir:loadsir:1.2.0'
第一步: <<配置>>
全局配置方式
全局配置方式,使用的是单例模式,即获取的配置都是一样的。可在Application中配置,添加状态页,设置初始化状态页,建议使用这种配置方式。
public class App extends Application { @Override public void onCreate() { super.onCreate(); LoadSir.beginBuilder() .addCallback(new ErrorCallback())//'添加各种状态页 .addCallback(new EmptyCallback()) .addCallback(new LoadingCallback()) .addCallback(new TimeoutCallback()) .addCallback(new CustomCallback()) .setDefaultCallback(LoadingCallback.class)//设置默认状态页 .commit(); }}
单独配置方式
如果你即想保留全局配置,又想在某个特殊页面加点不同的配置,可采用该方式。
LoadSir loadSir = new LoadSir.Builder() .addCallback(new LoadingCallback()) .addCallback(new EmptyCallback()) .addCallback(new ErrorCallback()) .build(); loadService = loadSir.register(this, new Callback.OnReloadListener() { @Override public void onReload(View v) { // 重新加载逻辑 } });
第二步: <<注册>>
在Activity中使用
@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_content); // Your can change the callback on sub thread directly. LoadService loadService = LoadSir.getDefault().register(this, new Callback.OnReloadListener() { @Override public void onReload(View v) { // 重新加载逻辑 } });}}
在View 中使用
ImageView imageView = (ImageView) findViewById(R.id.iv_img);LoadSir loadSir = new LoadSir.Builder() .addCallback(new TimeoutCallback()) .setDefaultCallback(LoadingCallback.class) .build();loadService = loadSir.register(imageView, new Callback.OnReloadListener() { @Override public void onReload(View v) { loadService.showCallback(LoadingCallback.class); // 重新加载逻辑 }});
在Fragment 中使用
由于Fragment添加到Activitiy方式多样,比较特别,所以在Fragment注册方式不同于上面两种,大家先看模板代码:
@Nullable@Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { //第一步:获取布局View rootView = View.inflate(getActivity(), R.layout.fragment_a_content, null); //第二步:注册布局View LoadService loadService = LoadSir.getDefault().register(rootView, new Callback.OnReloadListener() { @Override public void onReload(View v) { // 重新加载逻辑 } }); //第三步:返回LoadSir生成的LoadLayout return loadService.getLoadLayout();}
第三步: <<回调>>
直接回调
protected void loadNet() { // 进行网络访问... // 进行回调 loadService.showSuccess();//成功回调 loadService.showCallback(EmptyCallback.class);//其他回调 }
转换器回调 (推荐使用)
如果你不想再每次回调都要手动进行的话,可以选择注册的时候加入转换器,可根据返回的数据,适配对应的回调。
LoadService loadService = LoadSir.getDefault().register(this, new Callback.OnReloadListener() { @Override public void onReload(View v) { // 重新加载逻辑 }}, new Convertor() { @Override public Class<? extends Callback> map(HttpResult httpResult) { Class<? extends Callback> resultCode = SuccessCallback.class; switch (httpResult.getResultCode()) { case SUCCESS_CODE://成功回调 if (httpResult.getData().size() == 0) { resultCode = EmptyCallback.class; }else{ resultCode = SuccessCallback.class; } break; case ERROR_CODE: resultCode = ErrorCallback.class; break; } return resultCode; }});
回调的时候直接传入转换器指定类型的数据。
loadService.showWithConvertor(httpResult);
自定义回调页
LoadSir为了完全解耦,没有预设任何状态页,需要自己实现,开发者自定义自己的回调页面,比如加载中,没数据,错误,超时等常用页面, 设置布局及自定义点击逻辑
public class CustomCallback extends Callback { @Override protected int onCreateView() { return R.layout.layout_custom; } @Override protected boolean onRetry(Context context, View view) { Toast.makeText(context.getApplicationContext(),"Hello mother fuck! :p",Toast.LENGTH_SHORT).show(); return true;//返回true则覆盖了register时传入的重试点击事件,返回false则两个都执行 }}
总结
建议在Application中全局配置,在BaseActivity,BaseFragment或者MVP中封装使用,能极大的减少代码量,让你的代码更加优雅,生活更加愉快。时间和个人能力有限,如果大家发现需要改进的地方,欢迎提交issue。
如果这个库对你有用的话,也请点个star:p Github传送门
- 九分靠谱的加载反馈框架LoadSir
- 优雅地处理加载中(loading),重试(retry)和无数据(empty)等---LoadSir
- 反馈、无反馈、不和谐的反馈
- 电流反馈和电压反馈的判断
- 应用崩溃的反馈
- OpenGL的反馈
- OpenGL的反馈
- 放大电路的反馈
- 放大电路的反馈
- 反馈的判定方法
- Android_view的触摸反馈
- 反馈的基础概述
- imageLoader加载图片的框架
- 【Android图片加载框架】制作自己的图片加载框架
- "KYERP"的问题反馈处
- 关于OpenGL的反馈 (转)
- 实时反馈的问答应用
- 反馈函数(F)的理解
- git的commit/push/add
- 【数学建模】CUMCM-2016A 系泊系统的设计 解题思路整理
- Gdal库的简单使用及注意事项(C++版本和C#版本)
- hibernate个人总结2
- java开发_""和null的区别
- 九分靠谱的加载反馈框架LoadSir
- 【踩坑日记】git stash误删恢复
- 第3周项目4 顺序表应用
- 执行同步数据库命令 su -s /bin/sh -c "keystone-manage db-sync" keystone 失败
- node.js非安装配置
- 扩展python
- MySQL数据库引擎特性,和优化
- TabLayout + Fragment + 网络请求
- DES加密在.net与java中的写法