最简单的android annotation demo

来源:互联网 发布:河南进出口数据 编辑:程序博客网 时间:2024/06/06 01:27

最近了解到android annotation,其实技术点也并不多,只是平时写应用的开发者接触的并不多。这里简单的写一个demo【findviewById】,用于理解,举一反三。

ViewInject类

package com.simpleanswer.annotationdemo.view;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ViewInject {
int id() default -1;
}

AnnotationActivity 基类

package com.simpleanswer.annotationdemo;

import java.lang.reflect.Field;

import com.simpleanswer.annotationdemo.view.ViewInject;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class AnnotationActivity extends Activity {

@Overridepublic void setContentView(int layoutResID) {    super.setContentView(layoutResID);    autoInjectAllField(this);}public void autoInjectAllField(Activity activity){  //得到Activity对应的Class  Class clazz=this.getClass();  //得到该Activity的所有字段  Field[] fields=clazz.getDeclaredFields();  for(Field field :fields)  {    //判断字段是否标注ViewInject    if(field.isAnnotationPresent(ViewInject.class))    {      //如果标注了,就获得它的id      ViewInject inject=field.getAnnotation(ViewInject.class);      int id=inject.id();      if(id>0)      {        //反射访问私有成员,必须加上这句        field.setAccessible(true);        //然后对这个属性复制        try {            field.set(activity, activity.findViewById(id));        } catch (IllegalAccessException e) {            e.printStackTrace();        } catch (IllegalArgumentException e) {            e.printStackTrace();        }      }    }  }}

}

MainActivity引用

package com.simpleanswer.annotationdemo;

import com.simpleanswer.annotationdemo.view.ViewInject;

import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AnnotationActivity {

@ViewInject(id=R.id.main_tv) TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    tv.setText("我爱这个世界!");}

}

xml我就不贴了。源码自行下载。

源码

0 0
原创粉丝点击