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

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 图

loading

empty

error

无网络时弹出 dialog:

error_dialog

使用

gradle

Step 1. Add the JitPack repository to your build file

Add 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 对象设置状态时,该对象必须有 parent

2.失败页面的无网络状态已经处理,runnable 里只需要包装有网络时的处理动作.

blog

介绍一下页面状态管理类 PageStateManager,我实在看不下去你们直接用 Layout

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值