zoukankan      html  css  js  c++  java
  • android 简单粗暴的注解初始化View学习

    原理是在Activity加载好后通过找到Activity中使用注解的字段,再通过Java反射的方式,动态的给这个字段设置值。

    1定义一个注解接口

    /**
     * view inect by id
     * 
     * @author Lucky
     * 
     */
    @Target(ElementType.FIELD)//表示用在字段上
    @Retention(RetentionPolicy.RUNTIME)//表示在生命周期是运行时
    public @interface ViewInject {
        int value() default 0;
    }

    2、我们需要定义个BaseActivity,在这个类中来解析注解

    /**
     * 
     * @author Lucky
     * 
     */
    public abstract class BaseActivity extends FragmentActivity {
        /**
         * get content view layout id
         * 
         * @return
         */
        public abstract int getLayoutId();
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(getLayoutId());
            autoInjectAllField();
        }
        /**
         * 解析注解
         */
        public void autoInjectAllField() {
            try {
                Class<?> clazz = this.getClass();
                Field[] fields = clazz.getDeclaredFields();//获得Activity中声明的字段
                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);
                            field.set(this, this.findViewById(id));//给我们要找的字段设置值
                        }
                    }
                }
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            }
        }
    }

    3:这样来使用

    public class TestActivity extends BaseActivity {
    
        @ViewInject(R.id.claim_statement)
        private WebView mWebView;
            
    
        @Override
        public int getLayoutId() {
            // TODO Auto-generated method stub
            return R.layout.activity_claim;
        }
    
    }

    相对于androidannotations,BufferKnife更简单的粗暴,要是不仅仅限于findbyID 就根据需求去选择这两种比较常用的注解框架

  • 相关阅读:
    数组实现栈
    栈应用实例单词逆序
    使用JXMapViewer将地图集成到swing app中
    使用xbee连接地面站和飞控
    QWT编译、配置、使用(Qt Creator)
    Qt跨线程调用错误解析及解决办法
    SVN版本服务器搭建(服务端+客户端)
    opencv配置过程 (cmake,vs2013,qt 5.4)
    基数排序/Go实现
    c/c++ 编译器内存对齐问题
  • 原文地址:https://www.cnblogs.com/yujian-bcq/p/5056864.html
Copyright © 2011-2022 走看看