package com.colcode.ioc.sample;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.colcode.ioc.R;
import java.lang.reflect.Field;
public class MainActivity extends Activity implements View.OnClickListener {
@BindView(id = R.id.id_tv_name,clickable = true)
TextView id_tv_name;
@BindView(id = R.id.id_lv_detail,clickable = false)
ListView id_lv_detail;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initBindView(this);
id_tv_name.setText("Hello");
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
}
public static void initBindView(Activity activity) {
// 通过反射获取到全部属性,反射的字段可能是一个类(静态)字段或实例字段
Field[] fields = activity.getClass().getDeclaredFields();
Log.v("fields-->", "" + fields.length);
if (fields != null && fields.length > 0) {
for (Field field : fields) {
//判断字段是否标注BindView
if (field.isAnnotationPresent(BindView.class)) {
// 返回BindView类型的注解内容
BindView bindView = field.getAnnotation(BindView.class);
if (bindView != null) {
int viewId = bindView.id();
boolean clickable = bindView.clickable();
try {
//反射访问私有成员,必须加上这句
field.setAccessible(true);
if (clickable) {
activity.findViewById(viewId).setOnClickListener(
(View.OnClickListener) activity);
}
//然后对这个属性复制
field.set(activity, activity.findViewById(viewId));
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.id_tv_name:
id_tv_name.setText("nihao");
break;
default:
break;
}
}
}
<!----------------------------------------------->
package com.colcode.ioc.sample;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Created by LC on 2016/1/7.
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface BindView {
public int id();
public boolean clickable();
}
android注解
最新推荐文章于 2023-09-07 14:01:01 发布