Android使用注解避免大量的findViewById()
2016-05-24 17:18
671 查看
BindView注解类 @Target(ElementType.FIELD)//表示要注解的是一个字段 @Retention(RetentionPolicy.RUNTIME) //添加@interface表明这是一个注解,等价于继承了java.lang.annotation.Annotation这个类 public @interface BindView { public int id();//view的id public boolean clickable() default false;//是否可点击,默认为false } 使用 public class AnnotationActivity extends Activity implements View.OnClickListener { @BindView(id = R.id.text_anno, clickable = true) private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_annotation); initView(this, findViewById(android.R.id.content)); } private void initView(Object viewClass, View view) { Field[] fields = viewClass.getClass().getDeclaredFields(); if (fields != null && fields.length > 0) { for (Field field : fields) { BindView bindView = field.getAnnotation(BindView.class); if (bindView != null) { int id = bindView.id(); boolean clickable = bindView.clickable(); try { field.setAccessible(true); if (clickable) { view.findViewById(id).setOnClickListener((View.OnClickListener) viewClass); } //将viewClass中的field赋值为view.findViewById(id) field.set(viewClass, view.findViewById(id)); } catch (IllegalAccessException e) { e.printStackTrace(); } } } } } @Override public void onClick(View v) { Toast.makeText(this, "click!", Toast.LENGTH_SHORT).show(); textView.setText("click"); }
相关文章推荐
- Android N的介绍
- Android平台手机 5大优势和劣势
- android socket 客户端 服务器端
- 图片下载之缓存
- Android KITKAT 以上实现沉浸式状态栏
- Android 缓存框架——ASimpleCache
- Android中ListView的滚动条隐藏
- 反射、注解与依赖注入总结
- android handler机制学习
- android实现聊天页面的气泡
- Android输入法隐藏
- Android内存优化之取代HashMap(SparseArray和ArrayMap解析)
- ListView学习
- Android屏幕适配全攻略(最权威的官方适配指导)
- android之自定义View和ViewGroup(四)(代码篇,实现圆形进度条)
- android检测导航栏是否存在的方法
- Android ShrinkButton源码简析
- Android Studio Instant Run 官方介绍翻译
- Android M运行时权限
- Android Apk自动更新service(直接拿来用)