YCStateLayout

Introduction: 状态切换,让 View 状态的切换和 Activity 彻底分离开。用 builder 模式来自由的添加需要的状态 View,可以设置有数据,数据为空,加载数据错误,网络错误,加载中等多种状态,并且支持自定义状态的布局。。目前已经用于新芽正式项目中,拓展性强!!
More: Author   ReportBugs   
Tags:

YCStateLayout 状态切换

1.关于 Android 界面切换状态的介绍

  • 怎样切换界面状态?有些界面想定制自定义状态?状态如何添加点击事件?下面就为解决这些问题!
    • 内容界面
    • 加载数据中
    • 加载数据错误
    • 加载后没有数据
    • 没有网络

2.思路转变,抽取分离类管理几种状态

  • 以前做法:
    • 直接把这些界面 include 到 main 界面中,然后动态去切换界面,后来发现这样处理不容易复用到其他项目中,而且在 activity 中处理这些状态的显示和隐藏比较乱
    • 利用子类继承父类特性,在父类中写切换状态,但有些界面如果没有继承父类,又该如何处理
  • 现在做法:
    • 让 View 状态的切换和 Activity 彻底分离开,必须把这些状态 View 都封装到一个管理类中,然后暴露出几个方法来实现 View 之间的切换。
    • 在不同的项目中可以需要的 View 也不一样,所以考虑把管理类设计成 builder 模式来自由的添加需要的状态 View

3.关于该状态切换工具优点分析

  • 可以自由切换内容,空数据,异常错误,加载,网络错误等 5 种状态
  • 父类 BaseActivity 直接暴露 5 中状态,方便子类统一管理状态切换
  • 倘若有些页面想定制状态布局,也可以自由实现,很简单

4.使用方法

  • 代码引用:compile 'cn.yc:YCStateLib:1.1.5'
  • 如下所示,具体可以直接参考代码,更多可以直接查看 demo ``` statusLayoutManager = StateLayoutManager.newBuilder(this)
              .contentView(R.layout.activity_content)
              .emptyDataView(R.layout.activity_emptydata)
              .errorView(R.layout.activity_error)
              .loadingView(R.layout.activity_loading)
              .netWorkErrorView(R.layout.activity_networkerror)
              .build();
    
/**
 * 点击重新刷新数据
 */
private void initEmptyDataView() {
    statusLayoutManager.showEmptyData();
    LinearLayout ll_empty_data = (LinearLayout) findViewById(R.id.ll_empty_data);
    ll_empty_data.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            initData();
            adapter.notifyDataSetChanged();
            showContent();
        }
    });
}

/**
 * 点击重新刷新
 */
private void initErrorDataView() {
    statusLayoutManager.showError();
    LinearLayout ll_error_data = (LinearLayout) findViewById(R.id.ll_error_data);
    ll_error_data.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            initData();
            adapter.notifyDataSetChanged();
            showContent();
        }
    });
}

/**
 * 点击设置网络
 */
private void initSettingNetwork() {
    statusLayoutManager.showNetWorkError();
    LinearLayout ll_set_network = (LinearLayout) findViewById(R.id.ll_set_network);
    ll_set_network.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent("android.settings.WIRELESS_SETTINGS");
            startActivity(intent);
        }
    });
}
```

5.实现效果

6.版本更新说明

  • v1.0 更新于 2017 年 3 月 28 日
  • v1.1 更新于 2017 年 12 月 3 日
  • v1.1.5 更新于 2018 年 4 月 25 日
Support Me
Apps
About Me
Google+: Trinea trinea
GitHub: Trinea