您的位置:首页 > 其它

自定义注解Annocation

2016-04-06 13:19 351 查看
原理:获取到我们的注解,通过java反射调用为特定元素设置值

1、定义注解

@Target(ElementType.FIELD)//表示用在字段上

@Retention(RetentionPolicy.RUNTIME)// 表示是在声明周期运行的

RetentionPoicy的取值有:

    1.SOURCE:在源文件中有效(即源文件保留)

    2.CLASS:在class文件中有效(即class保留)

    3.RUNTIME:在运行时有效(即运行时保留)

public @interface ViewId { //注解名字:VIewID

int value() default 0; //注解的属性名字:value,值类型 :int *当属性名为value时间,使用时可省略属性名,其他的不可以

}

2、注解的解释方法

public class ViewIdControler {

private Activity context;

public void regist(Activity context) {//为当前的Activity注册

this.context = context;

function();

}

// 解释注解

private void function() {

try {

Class<?> clazz = context.getClass(); //获得运行时类对象

Field[] fields = clazz.getDeclaredFields(); //获得申明的属性S

for (Field f : fields) {

// 判断是否带有ViewID的注解

if (f.isAnnotationPresent(ViewId.class)) {

ViewId viewId = f.getAnnotation(ViewId.class);// 获取注解

int id = viewId.value(); //通过属性名字,获取值

if (id > 0) {

f.setAccessible(true); //这个我也不太清楚

f.set(context, context.findViewById(id)); //设置值

}

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

3、使用自定义的注解

public class MainActivity extends Activity implements ViewIterface,

OnClickListener {

@ViewId(R.id.mima)

private EditText passWorld;

@ViewId(R.id.name)

private EditText name;

@ViewId(R.id.login)

private Button login;

private ProgressDialog dialog;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ViewIdControler controler = new ViewIdControler();

controler.regist(this);


initViews();

}

//如此就不用findviewById了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: