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包含常用的绑定,肯定存在有无法完成绑定的内容,还请大家帮忙测试,多多提建议或者一起和我完善和优化。
下面是我创建的一个讨论群,欢迎加入
时间: 2024-10-13 22:46:31