Android(安卓)注解的方式绑定UI ID
16lz
2021-01-24
注解的方式绑定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了
更多相关文章
- SavedStateHandle的使用,临时保存数据
- Android之HttpURLConnection小结
- Spinner的简单用法
- Android(安卓)studio开发简易音乐app遇到的问题
- Android实现计时与倒计时的5种方法
- Android在桌面创建快捷方式
- Android(安卓)intent数据传递
- 总结的Android中surfaceView清屏的方式。两种。(目的是为了自己
- Android中用GridView实现九宫格的两种方法