天天看点

Android控件状态依赖框架

Z在生产型Android客户端软件(企业级应用)开发中,界面可能存在多个输入(<code>EditText</code>)和多个操作(<code>MotionEvent</code>和<code>KeyEvent</code>),且操作依赖于输入的状态。如下图所示的场景:

设定图中

确认操作依赖于商品编码和储位的状态

跳过操作不依赖于输入状态

登记差异操作依赖于储位和数量的状态

输入框有三种状态:

待输入;

待校验;

校验成功。

操作需要当其依赖的输入数据校验成功,才能执行。

如果在Activity中去判断输入框状态,那么实际需要调用(3个输入框)<code>*</code>(3种状态)<code>*</code>(3个按钮) = 27个 if 判断,对于状态的维护将使得整个程序可维护性极差,并随着输入和操作的增加,维护的状态呈指数增长。

通过对这种场景的抽象,实现了Android控件状态依赖框架,其使用方法如下:

使用方法:

布局文件引用<code>WatchEditText</code>和<code>WatchButton</code>

由于<code>Library Module</code>中的控件<code>id</code>不是常量(可参考<code>ButterKnife</code>对<code>Library Module</code>的支持采用<code>R2</code>的原因),这里采用了<code>tag</code>的方式。

在<code>Activity中</code>通过注解申明依赖

<code>ViewName</code>定义控件名称,<code>ViewDependency</code>中<code>dependency</code>指定其依赖的控件<code>tag</code>。

直接执行<code>onClick</code>和<code>onEditorAction</code>(修改状态)

可以看出,这里并没有通过<code>if</code>判断各个输入控件的状态。

<code>onEditorAction</code>模拟调用软件的<code>Enter</code>进行校验,这里需要注意通过<code>editQuery1.complete()</code>修改该<code>EidtText</code>的状态。

整个框架分为三个package:<code>annotation</code>、<code>state</code>和<code>view</code>。

在<code>annotation</code>中定义<code>ViewName</code>和<code>ViewDependency</code>注解,分别用于<code>WatchEditText</code>和<code>WatchButton</code>。<code>ViewName</code>指定<code>WatchEditText</code>控件在业务中的名称,<code>ViewDependency</code>指定<code>WatchButton</code>依赖的<code>WatchEditText</code>控件;

在<code>state</code>中通过状态模式定义<code>Enter</code>、<code>Verify</code>、<code>Complete</code>,其基类为抽象类<code>Operator</code>,定义方法<code>operator</code>;

<code>WatchEditText</code>和<code>WatchButton</code>定义控件的依赖关系。<code>WatchEditText</code>实现<code>ViewState</code>接口,其包含三种状态的转换方法。

本文转自xsster51CTO博客,原文链接: http://blog.51cto.com/12945177/1929759,如需转载请自行联系原作者

本文转自xsster51CTO博客,原文链接: 本文转自xsster51CTO博客,原文链接: ,如需转载请自行联系原作者

,如需转载请自行联系原作者

继续阅读