您的位置:首页 > 其它

在张鸿洋的 LoadingAndRetryManager 的基础上改写,优化 api,封装常用的逻辑.不是以布局的形式,而是以管理类的形式来控制页面状态.

2017-04-09 14:06 991 查看

PageStateManager

项目地址:hss01248/PageStateManager

简介:在张鸿洋的 LoadingAndRetryManager 的基础上改写,优化 api,封装常用的逻辑.不是以布局的形式,而是以管理类的形式来控制页面状态.页面状态管理

在张鸿洋的LoadingAndRetryManager的基础上改写,优化 api,封装常用的逻辑.

更新:fragment 的操作改变了

由于 fragment 的生命周期引起的 bug,已取消原先直接传入 fragment 对象的方式.请改成传入组成 fragment 的 view,注意该 view 对象传入时,其 parent 不能为空,也就是,该 view 不能是 xml 的根 view,可以自己随便包一层.ps.其实 fragment 本质也是基于 view 包裹了一层 api,搞点生命周期之类的,api 难用得要死,还一大堆坑,还不如自己包装一个 view,自己加点生命周期,高度可控,减少 bug.我的项目中从来都不用 fragment,都是自己把 view 包装成各种 page.

API

BaseApplication 里的初始化

public static void initInApp(Context appContext)//使用默认提供的几个状态页面

/**
自定义状态页面,传入相应的 layout 文件的 id 即可.
* 如果需要后续调用自定义空白 msg,错误 msg 字符串的 api,则页面中显示该字符串的 textview 的 id 必须为 tv_msg_empty,tv_msg_error
*/
public static void initInApp(Context appContext,int layoutIdOfEmpty,int layoutIdOfLoading,int layoutIdOfError)

页面中生成 PageManager 对象

/**
*
* @param container  必须为 activity 或者 view.如果是 view,则该 view 对象必须有 parent
* @param retryAction 点击重试的动作,注意,只需要关注有网络的情况,无网络状态时已经封装好:弹出对话框询问用户是否去设置网络
* @param isShowLoadingOrContent 第一次是显示 loading(true)还是 content(false)
* @return 当前页面的状态管理器
*/
public static PageManager init(final Object container, boolean isShowLoadingOrContent ,final Runnable retryAction)

//如果当前页面的空白状态下,提示语需要自定义,则调用此方法
public static PageManager init(final Object container, final CharSequence emptyMsg, boolean isShowLoadingOrContent ,final Runnable retryAction)

控制页面状态

public void showLoading()
public void showContent()
public void showEmpty()
public void showError()
public void showError(CharSequence errorMsg)

默认的几个页面状态 UI 图






无网络时弹出 dialog:

使用

gradle

Step 1. Add the JitPack repository to your build fileAdd it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
Step 2. Add the dependency
dependencies {
compile 'com.github.hss01248:PageStateManager:1.0.3'
}

示例代码

pageStateManager = PageManager.init(this, "空空快快快快快快快快快快快快",true,new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this,"点击重试了...",Toast.LENGTH_LONG).show();
doNet();
}
});

private void doNet() {
pageStateManager.showLoading();

handler.postDelayed(new Runnable() {
@Override
public void run() {
int  state = new Random().nextInt(3);
switch (state){
case 0:
pageStateManager.showError("哈哈哈哈哈错误了");
break;
case 1:
pageStateManager.showEmpty();
break;
case 2:
pageStateManager.showContent();
}

}
},2000);
}

注意事项

1.给 view 对象设置状态时,该对象必须有 parent2.失败页面的无网络状态已经处理,runnable 里只需要包装有网络时的处理动作.

blog

介绍一下页面状态管理类 PageStateManager,我实在看不下去你们直接用 Layout
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: