之前讲到了介绍了一下xUtils的基本用法,今天我们就来具体介绍一下关于xUtils中的ViewUtils模块。

  在ViewUtils模块中我们首先看到的是它採用了一种注解的方式进行声明,那么我们首先来了解一下什么是注解。

  注解(Annotation)非常重要,未来的开发模式都是基于注解的。JPA是基于注解的。Spring2.5以上都是基于注解的。Hibernate3.x以后也是基于注解的,如今的Struts2有一部分也是基于注解的了,注解是一种趋势,如今已经有不少的人開始用注解了。注解是JDK1.5之后才有的新特性。

  JDK1.5之后内部提供的三个注解

@Deprecated 意思是“废弃的,过时的”

@Override 意思是“重写、覆盖”

@SuppressWarnings 意思是“压缩警告”

  我们首先来了解一下JDK内部提供的注解中比較难懂的一个SuppressWarnings,这是从jdk1.5的文档中找到的SuppressWarnings的值

all  - suppress all warnings from this code

deprecation  - suppress warnings from using deprecated code

unchecked - suppress warnings from an unchecked call or an unchecked cast

fallthrough - suppress warnings if a switch falls through without finding a valid case (and no default)

serial - suppress warnings if a Serializable class does not define a serialVersionUID

finally - suppress warnings from return within a finally (which will ignore return with the try)

  演示样例:

·   @SuppressWarnings("unchecked")

告诉编译器忽略 unchecked 警告信息。如使用List,ArrayList等未进行參数化产生的警告信息。

·   @SuppressWarnings("serial")

假设编译器出现这种警告信息:The serializable class WmailCalendar does not declare a static final serialVersionUID field of type long

       使用这个凝视将警告信息去掉。

·   @SuppressWarnings("deprecation")

假设使用了使用@Deprecated凝视的方法,编译器将出现警告信息。

       使用这个凝视将警告信息去掉。

·   @SuppressWarnings("unchecked", "deprecation")

告诉编译器同一时候忽略unchecked和deprecation的警告信息。

·   @SuppressWarnings("unused")

告诉编译器同一时候忽略没实用过的变量

  举个样例

  定义一个变量的时候会出现警告 The local variable jerehedu is never read。 警告我们的变量没有被用过。当我们加上注解@SuppressWarnings("unused")

  警告就没有了。这个就是注解的作用。

了解了注解的作用,我们再准备自己写一个注解,我们首先来看一下在ViewUtils模块中它的注解是怎么写的,以@ViewInject为例。

  这个是viewinject的源代码,在我们的ViewUtils中我们能够看到

// inject view
Field[] fields = handlerType.getDeclaredFields();
if (fields != null && fields.length > 0) {
for (Field field : fields) {
ViewInject viewInject = field.getAnnotation(ViewInject.class);
if (viewInject != null) {
try {
View view = finder.findViewById(viewInject.value(), viewInject.parentId());
if (view != null) {
field.setAccessible(true);
field.set(handler, view);
}
} catch (Throwable e) {
LogUtils.e(e.getMessage(), e);
}
} else {
ResInject resInject = field.getAnnotation(ResInject.class);
if (resInject != null) {
try {
Object res = ResLoader.loadRes(
resInject.type(), finder.getContext(), resInject.id());
if (res != null) {
field.setAccessible(true);
field.set(handler, res);
}
} catch (Throwable e) {
LogUtils.e(e.getMessage(), e);
}
} else {
PreferenceInject preferenceInject = field.getAnnotation(PreferenceInject.class);
if (preferenceInject != null) {
try {
Preference preference = finder.findPreference(preferenceInject.value());
if (preference != null) {
field.setAccessible(true);
field.set(handler, preference);
}
} catch (Throwable e) {
LogUtils.e(e.getMessage(), e);
}
}
}
}
}
}

  首先获得文件的注解为ViewInject

  ViewInject viewInject = field.getAnnotation(ViewInject.class);

  将我们通常所写的findViewById封装在这里

  findviewbyidView view = finder.findViewById(viewInject.value(), viewInject.parentId());

  至于怎样封装在我们的ViewFinder中能够找到

  这就是我们的xUtils怎样通过注解的方式来完毕对findViewById这种方法的二次封装

  疑问咨询或技术交流,请增加官方QQ群:

idkey=69fd2f84c1212ecb10062430746aa802c93431c006c1d8cd8c34c5dd4f14772d" target="_blank"> (452379712)

作者:杰瑞教育

出处:http://www.cnblogs.com/jerehedu/ 

本文版权归烟台杰瑞教育科技有限公司和CSDN共同拥有,欢迎转载,但未经作者允许必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

 

xUtils怎样通过注解对FindViewById进行封装的更多相关文章

  1. xUtils如何通过注解对FindViewById进行封装

    之前讲到了介绍了一下xUtils的基本使用方法,今天我们就来详细介绍一下关于xUtils中的ViewUtils模块. 在ViewUtils模块中我们首先看到的是它采用了一种注解的方式进行声明,那么我们 ...

  2. Android中通过注解代替findViewById方法

    转自:http://www.2cto.com/kf/201405/302998.html 这篇文章主要讲解注解实现findViewById的功能,首先我们来熟悉一下在java中怎么定义一个注解和解析一 ...

  3. 如何通过注解Bean类来封装SQL插入语句

    整体思路是酱紫的: 给bean上注解说明该bean对应着数据库中哪张表,给每个bean的属性都注解说明各自对应着这张表的哪个字段. 通过类反射获取表名,通过逐个反射每个属性的getter方法,获取注解 ...

  4. 【转】Android 最火框架XUtils之注解机制详解

    原文:http://blog.csdn.net/rain_butterfly/article/details/37931031 在上一篇文章Android 最火的快速开发框架XUtils中简单介绍了x ...

  5. Android 最火框架XUtils之注解机制具体解释

    在上一篇文章Android 最火的高速开发框架XUtils中简介了xUtils的基本用法,这篇文章说一下xUtils里面的注解原理. 先来看一下xUtils里面demo的代码: @ViewInject ...

  6. xUtils框架

    我要为大家推荐的是一个Android基于快速开发的一个框架——xUtils,它是在aFinal基础上进行重构和扩展的框架,相比aFinal有很大的改善.同时,如果如果你的应用是基于网络的,那么只要处理 ...

  7. Android Xutils 框架(转)

    Android Xutils 框架 (转) 目录(?)[-] xUtils简介 目前xUtils主要有四大模块 使用xUtils快速开发框架需要有以下权限 混淆时注意事项 DbUtils使用方法 Vi ...

  8. xUtils类库的使用

    序言: 作为一个职业的程序猿,不会像新手一样把每一个需要实现的功能每次重写一遍,因为程序猿能熟练的使用各种第三方类库. 毕竟人类因为会使用工具才站到了食物链顶端. 现在就让我们学习使用xUtils类库 ...

  9. Android App 开发常用的xUtils框架

      最近搜了一些框架供初学者学习,比较了一下XUtils是目前git上比较活跃 功能比较完善的一个框架,是基于afinal开发的,比afinal稳定性提高了不少,下面是介绍: 鉴于大家的热情,我又写了 ...

随机推荐

  1. jQuery源码浅析

    这几天看了下jQuery源码,有些收获,解答了我以前对jQuery的疑问,现在我把收获分享给大家. 一.jQuery为何弄成自执行函数,以及为何在引用了jquery文件之后,可以通过$或jQuery来 ...

  2. C++使用第三方静态库的方法

    以jasoncpp为例 首先在github下载最新的的jasoncpp包并解压 找到类似makefiles的文件编译,一般是打开sln文件使用vs编译(生成解决方案),在build文件中可以找到对应的 ...

  3. thinkphp 检测上传的图片中是否含有木马脚本

    1.检测原理 要想检测图片中是否含有木马脚本,首先从制作原理来分析这种木马程序.这种木马程序是十六进制编码写的,图片的十六进制代码中主要包含<% ( ) %>.<? ( ) ?> ...

  4. SOAP Handler

    概述 SOAP Handler是一个SOAP message的拦截器,它可以拦截进来或出去两个方向的SOAP message,修改并决定是否放行. 例如: 在服务端启用一个handler,拦截请求的m ...

  5. js for循环的陷阱

    ☞问题概述 一页面有三个按钮,点击提示相应内容.相应内容已从后台获取,并转化成json数组. var content = ["提示1", "提示2", &quo ...

  6. ansible用playbook实现定期监控各机器磁盘和进程状态

    目标:用ansible定期监控各机器的磁盘空间状况 和进程运行状况 1)配置playbook脚本,实现对磁盘空间 和 特定进程运行状态的每日检查: 2)通过邮件插件,把检测结果发到ops邮箱: 一.p ...

  7. CodeForces - 875D High Cry

    题面在这里! 直接考虑每个位置成为最右边的最大值的位置,统计不合法区间,补集转化一下就好啦. 复杂度O(N * 30) #include<bits/stdc++.h> #define ll ...

  8. 【树形dp】VK Cup 2012 Round 1 D. Distance in Tree

    统计树中长度为K的路径条数. 用f[u][k]表示从u结点的子树中出发,终止于u结点的长度为k的路径条数. 边dp边统计答案.为了防止重复统计,在枚举子节点的时候,先将该子节点和当前u结点(和前面已经 ...

  9. python基础之文件操作,函数

    文件操作 +模式: r+t  w+t  a+t  r+b   w+b  a+b 可读可写,其他功能与人,r,w,a相同 f.seek(offset,whence) 文件指针移动    offest的单 ...

  10. Ui Automator Test Through Command

    问题描述: 通过adb shell uiautomator runtest 命令,直接运行java测试例. 命令解析: adb shell uiautomator runtest <JARS&g ...