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

  之前讲到了介绍了一下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群: (452379712)

作者:杰瑞教育
出处:http://www.cnblogs.com/jerehedu/ 
本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

时间: 2024-10-10 13:41:54

xUtils如何通过注解对FindViewById进行封装的相关文章

xUtils怎样通过注解对FindViewById进行封装

之前讲到了介绍了一下xUtils的基本用法,今天我们就来具体介绍一下关于xUtils中的ViewUtils模块. 在ViewUtils模块中我们首先看到的是它採用了一种注解的方式进行声明,那么我们首先来了解一下什么是注解. 注解(Annotation)非常重要,未来的开发模式都是基于注解的.JPA是基于注解的.Spring2.5以上都是基于注解的.Hibernate3.x以后也是基于注解的,如今的Struts2有一部分也是基于注解的了,注解是一种趋势,如今已经有不少的人開始用注解了.注解是JDK

Android中通过注解代替findViewById方法

尊重原创 http://write.blog.csdn.net/postedit/26507351 这篇文章主要讲解注解实现findViewById的功能,首先我们来熟悉一下在java中怎么定义一个注解和解析一个注解 注解的概念是在jdk5.0中提出来的,在java.lang的包中已经定义了三个注解:Override,Deprecated,SuppressWarnings Override相信大家非常熟悉,就是表明这个方法是改写了父类的方法 Deprecated表示在新版本的 jdk中已经不建议

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

在上一篇文章Android 最火的高速开发框架XUtils中简介了xUtils的基本用法,这篇文章说一下xUtils里面的注解原理. 先来看一下xUtils里面demo的代码: @ViewInject(R.id.tabhost) private FragmentTabHost mTabHost; @ViewInject(R.id.big_img) private ImageView bigImage; 可能好多人一看就说这是个what,事实上这是Java core里面的内容,做JavaEE的应该

Android 最火的快速开发框架XUtils之注解机制详解

在上一篇文章Android 最火的快速开发框架XUtils中简单介绍了xUtils的基本使用方法,这篇文章说一下xUtils里面的注解原理. 先来看一下xUtils里面demo的代码: @ViewInject(R.id.tabhost) private FragmentTabHost mTabHost; @ViewInject(R.id.big_img) private ImageView bigImage; 可能好多人一看就说这是个what,其实这是Java core里面的内容,做JavaEE

Android 最火开发框架 xUtils

xUtils简介 xUtils3 api变化较多, 已转至 https://github.com/wyouflf/xUtils3 xUtils 2.x对Android 6.0兼容不是很好, 请尽快升级至xUtils3. xUtils 包含了很多实用的android工具. xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... xUitls 最低兼容android 2.2 (api level 8) 目前xUtils主

Android Xutils 框架

Android Xutils 框架 (转) 目录(?)[-] xUtils简介 目前xUtils主要有四大模块 使用xUtils快速开发框架需要有以下权限 混淆时注意事项 DbUtils使用方法 ViewUtils使用方法 HttpUtils使用方法 普通get方法 使用HttpUtils上传文件 或者 提交数据 到服务器post方法 使用HttpUtils下载文件 BitmapUtils 使用方法 其他更多示例代码见sample文件夹中的代码 输出日志 LogUtils xUtils简介 xU

Xutils的简单总结

## xUtils简介* xUtils 包含了很多实用的android工具.* xUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持,拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响.* xUitls最低兼容android 2.2 (api level 8) ## 目前xUtils主要有四大模块: * DbUtils模块: > * android中的orm框架,一行代码就可以进行增删改查: > * 支持事务,默认关闭: &g

android 开源框架xUtils

首先查到的博客地址:  http://zxs19861202.iteye.com/blog/2003241 Github地址: https://github.com/wyouflf/xUtils xUtils简介 xUtils 包含了很多实用的android工具. xUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... xUitls最低兼容android 2.

Android开发之反射与注解

反射 类类型Class的使用 类类型Class的实例获取方式有一下三种 public static void main(String[] arg0) { String result = "Hello ReflectionText.."; System.out.println(result); Class userClass1 = User.class; Class userClass2 = new User().getClass(); try { Class userClass3 =