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使用注解避免大量的findViewById()
最新推荐文章于 2023-02-15 08:58:34 发布