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

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

IHolder和IData是AVLib的两个组件,在前面已经使用过了,那么这一篇将会详细说明这两个组件的用法。

IHolder

 IHolder是AVLib中View自动绑定的组件规范,所有@Id使用只能存在IHolder派生的类中。
  1. 源码

    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)。
  2. @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;
  3. 使用示例
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派生出的类中。
  1. 源码
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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。