«

Android快速开发之appBase——(3).详解IHolder和IData

时间:2024-3-2 18:46     作者:韩俊     分类: Android


转载请注明本文出自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

标签: android

热门推荐