GithubHelp home page GithubHelp logo

cowthan / statusui Goto Github PK

View Code? Open in Web Editor NEW
43.0 3.0 16.0 649 KB

界面状态和UI切换,如loading, empty, server error等,非侵入式组件,状态和UI都是可以配置的,也有内置的通用Status和默认UI

License: Apache License 2.0

Java 100.00%

statusui's Introduction

StatusUIManager: 界面状态管理(loading,数据空,服务器出错,网络出错,数据解析出错....)

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里
参数3callback,状态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) {

        }
    }));

}

statusui's People

Contributors

cowthan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

statusui's Issues

感谢楼主

不错的功能,用得着,谢谢分享啊

点击事件无法监听

StatusProvider

if(p instanceof FrameLayout){
    this.container = (FrameLayout) p;
    this.callback.onCreate(0, getStatusView());
 }else{
    throw new RuntimeException(contentView.getClass().getName() + "必须作为FrameLayout的子元素");
 }

在 StatusProvider类的构造方法中添加了
this.callback.onCreate(0, getStatusView());

设置点击事件,无响应

public void onCreate(int status, View statusView) {
    TextView tv = (TextView) statusView.findViewById(R.id.btn_retry);
    tv.setOnClickListener(new View.OnClickListener() {
    @Override
     public void onClick(View v) {
         Toast.makeText(MainActivity.this, "1231231321", Toast.LENGTH_LONG).show();
     }
});

这里的点击事件无法监听。

不知道是怎么回事呢?

onCreate 不响应

void onCreate(int status, View statusView) 这个方法没有被调用到吧...

NPE in StatusProvider.java

It would case NPE in StatusUI/status-ui/src/main/java/org/ayo/view/status/StatusProvider.java

...
    public void hideStatusView(){
        if(statusView == null){
            statusView.setVisibility(View.GONE);
        }
    }
...

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.