zoukankan      html  css  js  c++  java
  • Android注解学习(1)

    对于注解这个概念刚开始不是很理解,翻阅了其他人博客,参考实现的例子开始理解与运用。以前刚开始的写android项目时,一般找定义控件并初始化控件都是调用findviewbyId,然而当一个布局页面(类似提交表单页面)下控件特别多时代码就会显得臃肿,也不方便后续维护 。后面,别人推荐下去用xutils框架发现提供注解去绑定控件,我感觉对于注解直观来看他把声明与绑定控件合在一起,代码清晰好多。有没有?

     1     
     2     @ViewInject(id = R.id.lv_test1)
     3     private ListView lv_test1;
     4     
     5  
     6 
     7 
     8     @Override
     9     protected void onCreate(Bundle savedInstanceState) {
    10         super.onCreate(savedInstanceState);
    11         setContentView(R.layout.activity_main);
    12 
    13     }

    下面重点需要了解注解使用的概念与语法

    android api 官网描述的可以看到它是属于java.lang包下并三块内容来描述分别为元注解,接口,枚举;

    下面主要介绍元注解:

    1.Annotations--元注解

    1)Documented--定义一个用于表示一个注释的元注解,并被认为是公共接口的一部分。Documented是一个标记注解,没有成员。

    2)Inherited--定义一个用于表示注释自动继承的元注解。

    3)Retention--定义用于确定注释的保留范围的元注解。(即:被描述的注解在什么范围内有效)

    4)Target--定义确定什么ElementType注释可用于元注解。(即:被描述的注解可以用在什么地方)

    可以参考(深入理解Java:注解(Annotation)自定义注解入门

    2.用法看下面如下:

     1 import java.lang.annotation.ElementType;
     2 import java.lang.annotation.Retention;
     3 import java.lang.annotation.RetentionPolicy;
     4 import java.lang.annotation.Target;
     5 
     6 @Target(ElementType.FIELD)
     7 @Retention(RetentionPolicy.RUNTIME)
     8 public @interface ViewInject {
     9     public int id();
    10 }
    @Target(ElementType.FIELD)--指该注解用于字段

    @Retention(RetentionPolicy.RUNTIME)--指作用在运行时

    定义注解格式:
      public @interface 注解名 {定义体}

    那如何将自定义的注解与控件绑定在一起?
     1 /**
     2      * 初始化findviewbyid注解
     3      */
     4     public void initView(Object windowobj) {
     5         //获取windowobj对象所在类声明的字段
     6         Field[] fields = windowobj.getClass().getDeclaredFields();
     7         if (fields != null && fields.length > 0) {
     8             for (Field field : fields) {
     9                 try {
    10                     //并不是将方法的访问权限改成了public,而是取消java的权限控制检查
    11                     field.setAccessible(true);
    12                     if (field.get(this) != null)
    13                         continue;
    14                     //获取有ViewInject字段的注解对象
    15                     ViewInject viewInject = field
    16                             .getAnnotation(ViewInject.class);//
    17                     if (viewInject != null) {
    18                         int viewId = viewInject.id();
    19                         //将该字段与控件进行绑定
    20                         field.set(this, findViewById(viewId));
    21                     }
    22                 } catch (Exception e) {
    23                     e.printStackTrace();
    24                 }
    25             }
    26         }
    27     }
    原创
  • 相关阅读:
    FXML Stuffs (include and define)
    javaFX中解决填充(拉伸)问题
    <转>用 Java 技术创建 RESTful Web 服务
    webservice restful一个小例子
    《转》理解restful
    webservice之restlet实现
    WebService:CXF-SPRING 读书笔记
    PHP 单链表
    php 读xml的两种方式
    php输出金字塔
  • 原文地址:https://www.cnblogs.com/lmf-techniques/p/5059411.html
Copyright © 2011-2022 走看看