自定义注解 获取控件id
2016-08-23 00:00
239 查看
第一步:创建 InjectView 注解类(@annotation)
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface InjectView {
int value();
}
第二步:创建基类BaseActivity,在基类 里添加方法:
@Override
public void setContentView(int portLayoutResID) {
super.setContentView(portLayoutResID);
injectViews();
}
/**
* 注入组件
*/
private void injectViews() {
Class<?> clazz = ((Object) this).getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
InjectView injectView = field.getAnnotation(InjectView.class);
if (injectView != null) {
field.setAccessible(true);
try {
field.set(this, findViewById(injectView.value()));
} catch (IllegalAccessException e) {
LogUtil.e(((Object) this).getClass().getSimpleName(), "", e);
// log.error("", e);
} catch (Exception e) {
// log.error("field:" + field.getName(), e);
LogUtil.e(((Object) this).getClass().getSimpleName(), "", e);
throw new RuntimeException(e);
}
}
}
}
第三步 继承基类BaseActivity,调用注解:例如
public class TestAtivity extends BaseActivity{
@InjectView(R.id.go_back)
private LinearLayout btnBack;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.xxxx);
}
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface InjectView {
int value();
}
第二步:创建基类BaseActivity,在基类 里添加方法:
@Override
public void setContentView(int portLayoutResID) {
super.setContentView(portLayoutResID);
injectViews();
}
/**
* 注入组件
*/
private void injectViews() {
Class<?> clazz = ((Object) this).getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
InjectView injectView = field.getAnnotation(InjectView.class);
if (injectView != null) {
field.setAccessible(true);
try {
field.set(this, findViewById(injectView.value()));
} catch (IllegalAccessException e) {
LogUtil.e(((Object) this).getClass().getSimpleName(), "", e);
// log.error("", e);
} catch (Exception e) {
// log.error("field:" + field.getName(), e);
LogUtil.e(((Object) this).getClass().getSimpleName(), "", e);
throw new RuntimeException(e);
}
}
}
}
第三步 继承基类BaseActivity,调用注解:例如
public class TestAtivity extends BaseActivity{
@InjectView(R.id.go_back)
private LinearLayout btnBack;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.xxxx);
}
}
相关文章推荐
- Android自定义Dialog弹窗获取Dialog中的控件ID
- 如何在fragment中获取自定义view的控件id
- 如何在fragment中获取自定义view的控件id
- Android-反射+注解获取控件ID
- Android反射+注解获取控件ID
- 根据控件ID获取控件
- GridView控件中点击该行获取id值
- VC中如何获取鼠标点击处控件的ID
- 自定义文本框控件,包含Name跟ID
- 在控件的点击事件中获取空间自身的属性,如ID
- Javascript 阻止javascript事件冒泡,获取控件ID值
- clientid:怎么获取控件id的名字,用ClientID这样得到id名字
- ASP.NET多个用户控件回车提交表单问题解决和获取用户控件上的ID方法
- 实用js小汇总--获取服务器控件ID
- 母版页中控件ID获取
- 关于js获取不到客户端控件id的问题【搜藏】
- 客户端的JavaScript脚本中获取服务器端控件的值 及ID
- 客户端的JavaScript脚本中获取服务器端控件的值 及ID
- 获取客户端 控件id
- 学习小技巧---javascript中获取服务器端控件生成的页面ID