转载请注明本文出自JFlex的博客http://blog.csdn.net/jflex/article/details/46440009,请尊重他人的辛勤劳动成果,谢谢!
Android快速开发之appBase——(3).详解IHolder和IData
IHolder和IData是AVLib的两个组件,在前面已经使用过了,那么这一篇将会详细说明这两个组件的用法。
IHolder
IHolder是AVLib中View自动绑定的组件规范,所有@Id使用只能存在IHolder派生的类中。
源码
package com.snicesoft.avlib.rule; /** * @author zhe * @since 2015年4月15日 上午9:54:17 * @version V1.0 */ public abstract class IHolder { public abstract void initViewParams(); private Object tag; public void setTag(Object tag) { this.tag = tag; } public Object getTag() { return tag; } }
initViewParams():这个方法是在自动绑定@Id字段完成之后调用,为了方便初始化IHolder组件中的Views的无法绑定的属性,比如某个View是自定义控件,初始化这个自定义控件可能需要代码初始化一些工作。这块是根据实际业务完成,可写可不写。
Object tag:这个对象为了存放一个对象,用于绑定在IHolder中,作用类似View.setTag(tag)。
@Id详解
value():表示View的ResourceId值
backgroud():表示View的backgroud属性,可配置R.drawable.xx
backgroundColor():表示View的背景颜色,可配置R.color.xx
src():如果被注解字段是ImageView或者ImageView的派生类,表示设置ImageView的src属性
以上的属性设置,会在自动绑定View的关系的时候自动识别并设置。
示例:
@Id(R.id.tvTitle) TextView tvTitle;
@Id(value = R.id.tvTitle, backgroundColor = Color.RED) TextView tvTitle;
@Id(value = R.id.imgIcon, src = R.drawable.imgIcon) ImageView imgIcon;
使用示例
public class Holder extends IHolder{ @Id(R.id.tvTitle) TextView tvTitle; @Id(value = R.id.imgIcon, src = R.drawable.imgIcon) ImageView imgIcon; @Override public void initViewParams(){ } }
IData
IData是AVLib中数据自动绑定的组件规范,所有@DataBind只能存在IData派生出的类中。
源码
package com.snicesoft.avlib.rule; /** * @author zhu zhe * @since 2015年4月15日 上午9:54:17 * @version V1.0 */ public abstract class IData {}
IData仅仅只是定义了组件规范,必须要继承IData。
2. @DataBind详解
Id():表示View的ResourceId值
dataType():绑定的数据类型,现在有string、img、adapter、null,默认是string
loadingResId():如果是绑定图片,这个则为加载的缓冲图片
failResId():如果是绑定图片,这个则为加载失败的图片
prefix():当前绑定的值的前缀
suffix():当前绑定的值的后缀
pattern():当前绑定的值如果需要时间格式化,则可以配置完成
示例
@DataBind(id = R.id.tvTitle, prefix = "我是歌手-") String title = "第二季";
最终tvTitle的值等于”我是歌手-第二季”。
@DataBind(id = R.id.imgIcon,dataType = DataType.IMG, prefix = "http://img.xx.com/woshigeshou/") String icon = "upload/539728234.png";
最终结果会将http://img.xx.com/woshigeshou/upload/539728234.png这张网络图片加载给imgIcon。
@DataBind(id = R.id.lvData, dataType = DataType.ADAPTER) ListDemoAdapter adapter = new ListDemoAdapter();
最终结果会将这个adapter适配给lvData这个组件
3. 使用示例
public class Data extends IData{ @DataBind(id = R.id.imgIcon,dataType = DataType.IMG, prefix = "http://img.xx.com/woshigeshou/") String icon = "upload/539728234.png"; @DataBind(id = R.id.lvData, dataType = DataType.ADAPTER) ListDemoAdapter adapter = new ListDemoAdapter(); }
重点
可能会有同学问,上面的规范和使用讲完了,怎么还是看不到如何绑定的。所有绑定都在AVLib.java这个类中,我就不贴代码了,大家可以自己去看看。
从这个结构中可以看到initHolder和dataBind,没错这两个就是初始化Holder和绑定数据的方法。 setLoadImg是用来配置图片加载功能,目前appBase的Application中默认使用BitmapUtils作为图片加载器。
最后
目前,IHolder和IData包含常用的绑定,肯定存在有无法完成绑定的内容,还请大家帮忙测试,多多提建议或者一起和我完善和优化。 下面是我创建的一个讨论群,欢迎加入
279307798