您的位置:首页 > 移动开发 > Android开发

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");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: