c语言sscanf函数的用法是什么
251
2022-11-21
Android 注解的方式绑定UI ID
注解的方式绑定UI的ID的原理还是通过反射来实现的,当然也需要我们能够自定义注解。 首先我们自定义一个注解类型ViewIngect.java package com.example.testanotation.view.anotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 自定义注解,绑定UI的Id * 1.@Target表示需要注解的类型: * a.ElementType.TYPE: * 类、接口、枚举类型 * b.ElementType.FIELD: * 属性 * c.ElementType.METHOD: * 方法 * d.ElementType.PARAMETER: * 参数 * e.ElementType.CONSTRUCTOR: * 构造函数 * f.ElementType.LOCAL_VARIABLE: * 局部变量 * g.ElementType.ANNOTATION_TYPE: * 注解类型 * h.ElementType.PACKAGE: * 包 * * 2.@Retention表示注解保留的范围: * a.RetentionPolicy.SOURCE: * 注解只在源码中有效 * b.RetentionPolicy.CLASS: * 注解在源码和class中有效,此为默认策略 * c.RetentionPolicy.RUNTIME: * 注解在源码、class文件和运行时都有效 * * @author Yanbao_Wu */ @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface ViewInject { int value(); } 然后我们写一个Activity的基类进行发射的操作BaseActivity.java: package com.example.testanotation.view.base; import java.lang.reflect.Field; import com.example.testanotation.view.anotation.ViewInject; import android.app.Activity; import android.os.Bundle; /** * Activity 基类,支持通过注解的方式绑定UI * * @author Yanbao_Wu * @date: 2014-11-21 */ public abstract class BaseActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(initLayoutId()); injectViews(); } /** * 通过反射的方式将id绑定到加上注解的View * * @author Yanbao_Wu */ protected void injectViews(){ Field[] fields = this.getClass().getDeclaredFields(); for (Field field : fields) { if (field.isAnnotationPresent(ViewInject.class)) { ViewInject inject = field.getAnnotation(ViewInject.class); int id = inject.value(); if (id > 0) { field.setAccessible(true); try { field.set(this, this.findViewById(id)); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } } } public abstract int initLayoutId(); } 现在就可以在我们的Activity中利用注解的方式绑定UI的ID了MainActivity.java: package com.example.testanotation; import com.example.testanotation.view.anotation.ViewInject; import com.example.testanotation.view.base.BaseActivity; import android.os.Bundle; import android.widget.TextView; public class MainActivity extends BaseActivity { @ViewInject(R.id.test_anotation) private TextView anotationText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 注解的方式成功绑定id,text将被设置,否则会抛出空指针异常 anotationText.setText("Test Anotation"); } @Override public int initLayoutId() { return R.layout.activity_main; } } 以上就简单的实现了以注解的方式绑定ID了
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~