注解的方式绑定UI的ID的原理还是通过反射来实现的,当然也需要我们能够自定义注解。


首先我们自定义一个注解类型ViewIngect.java

package com.example.testanotation.view.anotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * 自定义注解,绑定UI的Id * [email protected]表示需要注解的类型: * a.ElementType.TYPE: * 类、接口、枚举类型 * b.ElementType.FIELD: * 属性 * c.ElementType.METHOD: * 方法 * d.ElementType.PARAMETER: * 参数 * e.ElementType.CONSTRUCTOR: * 构造函数 * f.ElementType.LOCAL_VARIABLE: * 局部变量 * g.ElementType.ANNOTATION_TYPE: * 注解类型 * h.ElementType.PACKAGE: * 包 *  * [email protected]表示注解保留的范围: * a.RetentionPolicy.SOURCE: * 注解只在源码中有效 * b.RetentionPolicy.CLASS: * 注解在源码和class中有效,此为默认策略 * c.RetentionPolicy.RUNTIME: * 注解在源码、class文件和运行时都有效 *  * @author Yanbao_Wu */@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public @interface ViewInject {int value();}
然后我们写一个Activity的基类进行发射的操作BaseActivity.java:

package com.example.testanotation.view.base;import java.lang.reflect.Field;import com.example.testanotation.view.anotation.ViewInject;import android.app.Activity;import android.os.Bundle;/** * Activity 基类,支持通过注解的方式绑定UI *  * @author Yanbao_Wu * @date: 2014-11-21 */public abstract class BaseActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(initLayoutId());injectViews();}/** * 通过反射的方式将id绑定到加上注解的View *  * @author Yanbao_Wu */protected void injectViews(){Field[] fields = this.getClass().getDeclaredFields();for (Field field : fields) {if (field.isAnnotationPresent(ViewInject.class)) {ViewInject inject = field.getAnnotation(ViewInject.class);int id = inject.value();if (id > 0) {field.setAccessible(true);try {field.set(this, this.findViewById(id));} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}}}}}public abstract int initLayoutId();}

现在就可以在我们的Activity中利用注解的方式绑定UI的ID了MainActivity.java:

package com.example.testanotation;import com.example.testanotation.view.anotation.ViewInject;import com.example.testanotation.view.base.BaseActivity;import android.os.Bundle;import android.widget.TextView;public class MainActivity extends BaseActivity {@ViewInject(R.id.test_anotation)private TextView anotationText;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);                // 注解的方式成功绑定id,text将被设置,否则会抛出空指针异常        anotationText.setText("Test Anotation");    }@Overridepublic int initLayoutId() {return R.layout.activity_main;}}

以上就简单的实现了以注解的方式绑定ID了

更多相关文章

  1. SavedStateHandle的使用,临时保存数据
  2. Android之HttpURLConnection小结
  3. Spinner的简单用法
  4. Android(安卓)studio开发简易音乐app遇到的问题
  5. Android实现计时与倒计时的5种方法
  6. Android在桌面创建快捷方式
  7. Android(安卓)intent数据传递
  8. 总结的Android中surfaceView清屏的方式。两种。(目的是为了自己
  9. Android中用GridView实现九宫格的两种方法

随机推荐

  1. Android(安卓)基于Zxing的扫码功能实现(二
  2. Android(安卓)ListView 异步加载图片并缓
  3. android 通过wifi调用打印机
  4. Android中动态改变控件的大小的一种方法
  5. Android(安卓)Resource介绍和使用(一)
  6. Android的消息机制Handler
  7. Android重难点解析——面试中可能被问到
  8. Android自学笔记:分析onXXX事件监听器中的
  9. Android(安卓)ButterKnife入门到放弃
  10. React-Native之Android(6.0及以上)权限申