Android通过注解来初始化控件
来源:互联网 发布:数据库爆破工具 编辑:程序博客网 时间:2024/05/22 13:00
Android通过注解来初始化控件
对于Android大神的思想与能力我只能膜拜与学习了,这里就从大神哪里学来的通过注解来初始化控件简单的概述一下,省去了那么繁琐的findViewById步骤(找到了还要强转,真心醉了)。
原理
原理是在Activity加载好后通过找到Activity中使用注解的字段,再通过Java反射的方式,动态的给这个字段设置值。
一、定义注解类ViewId.java
import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * Created 2015/9/7 Administrator tianzhao */// 表示用在字段上@Target(ElementType.FIELD)// 表示是在声明周期运行的@Retention(RetentionPolicy.RUNTIME)public @interface ViewId {int value() default 0;}二、定义BaseActivity.java基础类,在这个类中解析注解类
import android.app.Activity;import android.os.Bundle;import java.lang.reflect.Field;public abstract class BaseActivity extends Activity {/** * 返回布局的ID */public abstract int getLayoutId();/** * 初始化 */public abstract void init();/** * 设置监听 */public abstract void setListener();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(getLayoutId());autoInjectAllField();init();setListener();}public void autoInjectAllField() {try {Class<?> clazz = this.getClass();Field[] fields = clazz.getDeclaredFields();// 获得Activity中声明的字段for (Field field : fields) {// 查看这个字段是否有我们自定义的注解类标志的if (field.isAnnotationPresent(ViewId.class)) {ViewId inject = field.getAnnotation(ViewId.class);int id = inject.value();if (id > 0) {field.setAccessible(true);field.set(this, this.findViewById(id));// 给我们要找的字段设置值}}}} catch (IllegalAccessException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();}}}三、最后就是MainActivity.java了
import android.view.View;import android.widget.Button;import android.widget.TextView;public class MainActivity extends BaseActivity {@ViewId(R.id.tv)private TextView tv;@ViewId(R.id.bt)private Button bt;/** * 处理一些在onCreate里处理的事情 */@Overridepublic void init() {}@Overridepublic void setListener() {tv.setText("TextView注解成功");bt.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {tv.setText("Button注解成功");}});}@Overridepublic int getLayoutId() {return R.layout.activity_main;}}OK,就是这么简单,通过java的反射机制简化了多少代码,提高了多少开发效率。不过貌似这种方式会对效率有点影响。
0 0
- Android通过注解来初始化控件
- Android通过注解初始化View
- Android通过注解初始化View
- Android通过注解初始化View
- Android通过注解初始化View
- Android通过注解初始化View
- Android通过注解初始化View
- android : 使用注解初始化控件
- Android通过注解初始化绑定View
- android自定义注解初始化布局控件(二)
- Android Annotation(注解),简化View控件的初始化操作。
- android 自动初始化控件 不用注解不用findViewByid
- Android注解解析,注解用法,仿xUtils用注解初始化控件、点击事件(一)
- Android注解解析,注解用法,仿xUtils用注解初始化控件、点击事件(二)
- Android注解解析,注解用法,仿xUtils用注解初始化控件、点击事件(一)
- Android注解解析,注解用法,仿xUtils用注解初始化控件、点击事件(二)
- 通过注解初始化绑定View
- (一)Android使用自定义注释来初始化控件
- Oracle序列nextval以及currval的区别
- react-native试玩(15)-滚动视图
- JBoss 系列二:使用Apache httpd(mod_cluster)和JBoss构架高可用集群环境
- poj 2387 Til the Cows Come Home
- 零基础学python-12.2 关键字pass,else,break,continue
- Android通过注解来初始化控件
- BookKeeper
- Comparator比较器的使用,Map排序
- 嵌入式设备时间同步管理
- 带我家小子学编程 02
- Tcl文件操作---gets需注意的一小点
- 工作中遇到的SQL( 满足连续状态要求 )
- uva 1376 - Animal Run(最短路)
- 小程序-----输出字符串中的中文字符