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

时间: 2024-10-13 22:46:31

Android快速开发之appBase——(3).详解IHolder和IData的相关文章

Android快速开发之appBase——(4).详解com.snicesoft.Application和BaseActivity

Android快速开发之appBase--(4).详解com.snicesoft.Application和BaseActivity 在Android快速开发之appBase--(1).appBase介绍中使用过com.snicesoft.Application和BaseActivity,本篇则解开她们的面纱. 1. com.snicesoft.Application 1) 源码分析 package com.snicesoft; import java.util.ArrayList; import

Android快速开发之appBase——(6).HttpReq和APICloudSDK

Android快速开发之appBase--(6).HttpReq和APICloudSDK HttpReq和APICloudSDK都是网络请求组件,都是基于xUtils的HttpUtils重新封装的.接下来讲一下使用方法. 1.HttpReq 看以看到有这么几个方法 GET:GET方式请求 POST:普通的POST表单提交 POST:将数据以流的形式传递 /** * POST请求,用InputStream的方式传递请求参数 * * @param api * 接口地址 * @param reques

Android快速开发之appBase——(1).appBase介绍

Android快速开发之appBase--(1).appBase介绍 一直想写博客,苦于自己的文笔实在不行,在CSDN潜水了好几年,中间差不多3年没有写过博客.原因有二:1.文笔差:2.没时间. 今年开始,时间充裕了,开始计划练练自己的文笔,也让自己成长起来,希望从中能够提升自己的能力.望大家多多支持和关注!! 导读:appBase是什么? appBase是一个Android app开发的基础集合,目的是任何应用都可以在这个基础之上开发app,省去了搭建框架的时间. appBase=xutils

Android快速开发之appBase——(2).万能的Adapter

Android快速开发之appBase--(2).万能的Adapter android的Adapter是常用的一个组件,自定义的adapter基本上都是集成BaseAdapter,然后实现getView等一系列方法.时间长了,难免让人感觉到写的重复性代码过多,那么万能的Adapter讲解放你的双手. 对比 BaseAdapter package com.snicesoft.appbase.demo; import java.util.ArrayList; import java.util.Lis

Android快速开发之appBase——实战《购物车》

Android快速开发之appBase--实战<购物车> 最近将appBase实战于各种项目中,也发现了不少问题,并优化了很多功能.今天带给大家一个实战–<购物车>.购物车,在商城app中是必不可少的一部分,也是使用的比较多的,这里简单的做一个效果. 先来看看效果图 1.创建项目 第一种.引用appBase项目即可 第二种.将appBase的jar文件copy到libs下 我用的第二种,如上图所示. 2.代码生成 通过代码生成器生成Activity.Presenter.Adapte

Android快速开发之appBase——(5).BasePresenter的使用

Android快速开发之appBase--(5).BasePresenter的使用 Presenter是来自MVP中的概念,是用来处理与用户交互的逻辑.在这里更加简单化,Presenter中的方法是根据业务来定义,比如获取消息列表,那么业务常常会这样:先去请求网络,网络正常请求到数据返回并展示在UI层,网络错误没有拿到数据,看看缓存中有没有,然后从缓存中拿到数据并返回并展示在UI层:突然,有一天业务需求发生变化,只允许获取网络,网络错误UI上显示没有消息.如果之前在UI层已经做过数据为空的处理,

Android开发之Html类详解

在进行Android开发中经常回忽略Html类.这个类其实很简单,就是将HTML标签文本解析成普通的样式文本.下面就让我么看一下这个类的具体介绍. 类结构: java.lang.Object    ? android.text.Html 类概述: 这个类用于处理的HTML字符串并将其转换成可显示的样式文本.但并不是所有的HTML标记的支持. 公有方法: 说其简单是应为它就有四个方法: Public Methods static String escapeHtml(CharSequence tex

Android开发之SQLite数据库详解

Android开发之SQLite数据库详解 请尊重他人的劳动成果,转载请注明出处:Android开发之SQLite数据库详解 http://blog.csdn.net/fengyuzhengfan/article/details/40194393 Android系统集成了一个轻量级的数据库:SQLite, SQLite并不想成为像Oracle.MySQL那样的专业数据库.SQLite只是一个嵌入式的数据库引擎,专门适用于资源有限的设备上(如手机.PDA等)适量数据存取. 虽然SQLite支持绝大

Android开发之SoundPool使用详解

使用SoundPool播放音效 如果应用程序经常播放密集.急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了.因为MediaPlayer存在如下缺点: 1)         延时时间较长,且资源占用率高. 2)         不支持多个音频同时播放. Android中除了MediaPlayer播放音频之外还提供了SoundPool来播放音效,SoundPool使用音效池的概念来管理多个短促的音效,例如它可以开始就加载20个音效,以后在程序中按音效的ID进行播放.