StatusUI

Project Url: cowthan/StatusUI
Introduction: 界面状态和 UI 切换,如 loading, empty, server error 等,非侵入式组件,状态和 UI 都是可以配置的,也有内置的通用 Status 和默认 UI
More: Author   ReportBugs   DemoAPK   
Tags:

demo:

=============================

截图:

==============================

1 这是什么?

  • 此乃何物
    • 一个页面从开始请求数据到请求有了结果之后,有多种状态 UI 切换
    • 这个小 library 就是让你方便的控制这些状态的显示样式,显示和隐藏
    • 并且所有状态和 UI 都是可配置的
    • 并且不侵入你原始的布局,完全以组件的形式提供
    • 并且要求低,只要求你的 content view 外面包一层 FrameLayout
    • 并且使用简单,你只需要定义自己的 status 和显示样式,并且还内置了几个常见的状态和布局

2 怎么用?

1 状态定制,默认的状态在 DefaultStatus 里

public class DefaultStatus {
    public static final String STATUS_LOADING = "loading";
    public static final String STATUS_EMPTY = "empty";
    public static final String STATUS_NETOFF = "netoff";
    public static final String STATUS_SERVER_ERROR = "server-error";
    public static final String STATUS_LOGIC_FAIL = "logic-fail";
    public static final String STATUS_lOCAL_ERROR = "local-error";
}

反正就是个字符串常量,你在哪儿都可以自己定义

2 给各个状态配置不同 UI,对应默认状态的 UI 都在 DefaultStatusProvider

//STATUS_LOADING:正在加载
DefaultStatusProvider.DefaultLoadingStatusView

///STATUS_EMPTY:数据为空,一般用在列表页
DefaultStatusProvider.DefaultEmptyStatusView

//STATUS_NETOFF:没网了
DefaultStatusProvider.DefaultNetOffStatusView

//STATUS_SERVER_ERROR: 服务器出问题了,生产环境是可能出这个问题的
DefaultStatusProvider.DefaultServerErrorStatusView

//STATUS_LOGIC_FAIL:请求本身没有问题,但业务逻辑有问题,例如注册用户时,用户名重复,一般都会带个业务 code
DefaultStatusProvider.DefaultLogicFailStatusView

//STATUS_lOCAL_ERROR:请求本身没有问题,但处理数据时出异常了,虽然是手机端代码的问题,但大多数是服务器 json 给的不规范
DefaultStatusProvider.DefaultLocalErrorStatusView

StatusProvider 到底怎么回事?

StatusProvider(Context context, String status, View contentView, OnStatusViewCreateCallback callback)
意思就是状态提供者,名字取的不太合适,应该是状态 UI 提供者

参数 2:对应哪个 status
参数 3:内容 View,即正常数据的 View,必须包在一个 FrameLayout 里
参数 3:callback,状态 UI 初始化之后,可以做一些样式设置,事件设置等

3 控制显示状态 UI 和内容 UI

statusUIManager.show(String status) //显示对应状态 UI
statusUIManager.clearStatus()   //显示内容 UI

statusUIManager 里其实是一个 map,存储了所有你设置的 StatusProvider
一般代码如下:
private void initStatusUI(){
    statusUIManager = new StatusUIManager();

    statusUIManager.addStatusProvider(
            new DefaultStatusProvider.DefaultLoadingStatusView(
                    getActivity(),
                    DefaultStatus.STATUS_LOADING,
                    content,
                    new StatusProvider.OnStatusViewCreateCallback() {
        @Override
        public void onCreate(int status, View statusView) {

        }
    }));

    statusUIManager.addStatusProvider(
            new DefaultStatusProvider.DefaultEmptyStatusView(getActivity(),
                    DefaultStatus.STATUS_EMPTY,
                    content,
                    new StatusProvider.OnStatusViewCreateCallback() {
        @Override
        public void onCreate(int status, View statusView) {

        }
    }));

    statusUIManager.addStatusProvider(D
            new DefaultStatusProvider.DefaultServerErrorStatusView(
                    getActivity(),
                    DefaultStatus.STATUS_SERVER_ERROR,
                    content,
                    new StatusProvider.OnStatusViewCreateCallback() {
        @Override
        public void onCreate(int status, View statusView) {

        }
    }));

    statusUIManager.addStatusProvider(
            new DefaultStatusProvider.DefaultLogicFailStatusView(getActivity(),
                    DefaultStatus.STATUS_LOGIC_FAIL,
                    content,
                    new StatusProvider.OnStatusViewCreateCallback() {
        @Override
        public void onCreate(int status, View statusView) {

        }
    }));

    statusUIManager.addStatusProvider(
            new DefaultStatusProvider.DefaultNetOffStatusView(
                    getActivity(),
                    DefaultStatus.STATUS_NETOFF,
                    content,
                    new StatusProvider.OnStatusViewCreateCallback() {
        @Override
        public void onCreate(int status, View statusView) {

        }
    }));

    statusUIManager.addStatusProvider(
            new DefaultStatusProvider.DefaultLocalErrorStatusView(
                    getActivity(),
                    DefaultStatus.STATUS_lOCAL_ERROR,
                    content,
                    new StatusProvider.OnStatusViewCreateCallback() {
        @Override
        public void onCreate(int status, View statusView) {

        }
    }));

}
Apps
About Me
GitHub: Trinea
Facebook: Dev Tools