zoukankan      html  css  js  c++  java
  • Andorid之Annotation框架初使用(一)

    1. 设置Activity的布局

    @EActivity(R.layout.main)
    public class MyActivity extends Activity {}

    注: 此时在AndroidManifest.xml 注册Activity需要: <activity android:name="MyActivity_" />

    2. 设置及使用Application
    设置:在AndroidManifest.xml也需要配置<application android:name="MyApplicaton_" />

    @EApplication
    public class MyApplication extends Application {}

    使用:

    @EActivity
    public class MyActivity extends Activity {
      @App
      MyApplication application;
    }

    或者:

    @EBean
    public class MyBean {
      @App
      MyApplication application;
    }


    3. 普通类

    @EBean
    public class MyClass {}

    注:这个普通只能有一个构造函数,这个构造函数要不是没有参数,或者只有一个Context的参数

    使用: @Bean的标签每次都会创建一个实例,所以不能继承一个使用@EBean的类

    @EBean
    public class MyOtherClass {
      @Bean
      MyClass myClass;
    }


    声明接口的同时也实例化:

    @EActivity
    public class MyActivity extends Activity {
        /* A MyImplementation instance will be injected. 
         * MyImplementation 必须使用标签 @EBean and 实现 MyInterface.
         */
        @Bean(MyImplementation.class)
        MyInterface myInterface;
    }


    在普通类中引入它所在的Activity或者Service的Context

    @EBean
    public class MyClass {
      @RootContext
      Context context;
      // Only injected if the root context is an activity,else is null
      @RootContext
      Activity activity;
      // Only injected if the root context is a service,else is null
      @RootContext
      Service service;
      // Only injected if the root context is an instance of MyActivity,else is null
      @RootContext
      MyActivity myActivity;
    }


    使用标签@AfterViewInject, 会在所有依赖注入完成后才执行。

    @EBean
    public class MyClass {
      @SystemService
      NotificationManager notificationManager;
      @Bean
      MyOtherClass dependency;
      public MyClass() {
        // notificationManager and dependency are null
      }
      @AfterInject
      public void doSomethingAfterInjection() {
        // notificationManager and dependency 已经设置完成
      }
    }

    注意,拥有父子关系的@AfterInject的方法名字不能相同


    单例的普通类:

    @EBean(scope = Scope.Singleton)
    public class MySingleton {}

    注意: 在单例的普通类如果需要使用context,请使用ApplicationContext。也不要在这里注入view或者是view的事件

  • 相关阅读:
    lhgdialog的传值问题
    jquery中lhgdialog插件(一)
    有关eclipse的内存溢出问题
    oracle数据库cmd导出数据和导入数据
    java replace方法
    jaspersoft中分组打印
    Android开发小技巧之根据position判断ListView是否在显示
    Android开发中Chronometer的用法
    [转][darkbaby]任天堂传——失落的泰坦王朝(下)
    [转][darkbaby]任天堂传——失落的泰坦王朝(中)
  • 原文地址:https://www.cnblogs.com/lee0oo0/p/3149798.html
Copyright © 2011-2022 走看看