- 怎样切换界面状态?有些界面想定制自定义状态?状态如何添加点击事件?下面就为解决这些问题!
- 内容界面
- 加载数据中
- 加载数据错误
- 加载后没有数据
- 没有网络
- 以前做法:
- 直接把这些界面include到main界面中,然后动态去切换界面,后来发现这样处理不容易复用到其他项目中,而且在activity中处理这些状态的显示和隐藏比较乱
- 利用子类继承父类特性,在父类中写切换状态,但有些界面如果没有继承父类,又该如何处理
- 现在做法:
- 让View状态的切换和Activity彻底分离开,必须把这些状态View都封装到一个管理类中,然后暴露出几个方法来实现View之间的切换。
- 在不同的项目中可以需要的View也不一样,所以考虑把管理类设计成builder模式来自由的添加需要的状态View
- 可以自由切换内容,空数据,异常错误,加载,网络错误等5种状态
- 父类BaseActivity直接暴露5中状态,方便子类统一管理状态切换
- 倘若有些页面想定制状态布局,也可以自由实现,很简单
- 代码引用:compile 'cn.yc:YCStateLib:1.1.6'
- 如下所示,具体可以直接参考代码,更多可以直接查看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); } }); }
- v1.0 更新于2017年3月28日
- v1.1 更新于2017年12月3日
- v1.1.5 更新于2018年4月25日
- v1.1.6 更新于2018年11月15日,更新targetSdkVersion为27
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.