面向组件的思想
首先先谈谈何为面向组件,本人的观点是封装,封装是java的特性之一,在开发android时有时候适当的对某一些状态或者某些有公共特性的功能封装在一起组合成一个组件,这样你可以用,我也可以用,这个项目可以用,另一个项目也可以直接用,不需要重写写一遍它的功能,只需要暴露出几个共有方法即可,当然还必须做到一定的扩展性。
面向组件具有以下特点:
低耦合性:组件之间一般互不依赖,一个组件只需要知道另一个组件的“名字”就可以访问它;
高重用性:系统级的重用;
高互操作性:不同的开发商开发出来的组件只要定义好了接口就可以互相访问;
进程的透明性:组件可以工作在同一个进程也可以工作在不同的进程;
语言和开发环境的独立性:组件只需要定义好服务接口,内部实现可以采用任何语言。
此文讲网络状态,大家都知道我们在开发的时候请求数据有这几种状态,正在加载,网络连接失败,请求数据为空,请求成功这常见的四种,本人现在着手的一个项目比较坑,把网络连接失败分为无网和有网连接失败(此刻想吐槽产品经理N次)
NetworkComponent的封装
NetworkComponent封装了四种状态,正在加载,网络连接失败,加载为空,加载成功。本示例截图如下:
功能包括,根据不同状态显示这四种状态外,还可以随意改变文本,背景颜色,甚至直接替换掉某你想替换的状态布局。
NetworkComponent使用
先看xml布局
<com.demo.haisheng.networkcomponenntlibrary.NetworkComponent
android:id="@+id/network_component"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:state="succeed"> <!-- add your succeed content-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="数据请求成功"/>
</com.demo.haisheng.networkcomponenntlibrary.NetworkComponent>```
app:state 是设置初始状态,状态有四种,默认是成功的状态,NetworkComponent组件嵌套的是网络请求成功时的布局。
再看java代码
```java
@OnClick(R.id.bt)
public void onClick() { //此处模仿网络请求
mNetworkComponent.showLoadingLayout();//在请求数据之前先进行加载
new Thread(new Runnable() {
@Override
public void run() {
SystemClock.sleep(2000);//休眠就当在请求数据
Random random=new Random();
final int ran = random.nextInt(3) + 1;
runOnUiThread(new Runnable() {
@Override
public void run() {
switch (ran){
case 0:
case 1:
mNetworkComponent.showSucceedLayout();
break;
case 2:
mNetworkComponent.showNetworkErrLayout();
break;
case 3:
mNetworkComponent.showEmptyLayout();
break;
}
}
});
} }).start();}
代码很简单,简单模拟了网络请求状态来设置不同的页面显示,其中的NetworkComponent.showNetworkErrLayout();等方法是可以设置你想的文本内容,因为它是重载的方法。
具体去看代码实现吧
https://github.com/justinhaisheng/CommonNetworkStateLayout-master
这是我写的第一篇关于技术的文章,写得不好或者有技术方面讨论的请发邮件236685708@qq.com或者加我q一起讨论。谢谢