我们在做Android 程序开发的时候,总是会遇到页面展示问题,,比如页面无数据时候,显示什么状态, 网络连接异常的时候,显示什么界面, 正常情况下显示什么界面,添加头条目,尾条目等等问题, 这个时候要是能有一个统一的对这些状态做一个封装,让每个页面都可以使用的话,就可以减少这种多状态下的,重复写代码.
下面是这个依赖的链接地址:https://github.com/hss01248/PageStateManager
使用方法:
在activity中启用:
MyPageManager.initWhenAppOnCreate(getApplicationContext(),R.layout.pager_empty,R.layout.loading_page_manager,R.layout.pager_error);
其中参数2,参数3,参数4,分别对应的是,无数据显示的布局;加载中的显示的布局;加载失败展示的布局.
然后在activity中 的oncreat() 方法中,
/**
*
* @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 MyPageManager init(final Object container, final MyPageListener pageListener){
PageManager manager = PageManager.generate(container, true,pageListener);
MyPageManager myPageManager = new MyPageManager();
myPageManager.pageManager = manager;
return myPageManager;
}
//其中,MyPageListener继承PageListener,并提供一个全局处理retry时无网络的情况:
@Override
public void onRetry(View retryView) {
if (!isNetWorkAvailable(retryView.getContext())) {
onNoNetWork(retryView);
} else {
onReallyRetry();
}
}
public void onNoNetWork(View retryView) {
if(retryView.getContext() instanceof Activity){
showNoNetWorkDlg((Activity) retryView.getContext());
}else {
//todo
}
}
protected abstract void onReallyRetry();
如: 其中的出入的llError是页面title下面的layout布局
myPageManager = MyPageManager.init(llError, new MyPageListener() {
@Override
protected void onReallyRetry() {
myPageManager.showLoading();
//相关操作
}
});
网络无法连接下的显示,接口返回错误的显示,内容显示
//网络错误时候的显示
myPageManager.showEmpty("未加载到数据,点击下面按钮刷新重试~~");
//加载成功后的显示布局
myPageManager.showContent();
//显示错误的显示
myPageManager.showError(msg);
加载框的 dismiss() 自己不用处理,框架内部已经处理好了,发生这几个状态后,会自动消失!