目录

Extra

原文地址: https://github.com/excilys/androidannotations/wiki/Extras#executing-code-after-extras-injection

@Extra

@Extra注释一个从Activity中启动意图中获取正确值的字段,例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
@EActivity
public class MyActivity extends Activity {

  @Extra("myStringExtra")
  String myMessage;

  @Extra("myDateExtra")
  Date myDateExtraWithDefaultValue = new Date();

}

如果你不给@Extra注释的字段值赋值,那么这个字段值将直接使用被使用这个字段名称。比如:

1
2
3
4
5
6
7
@EActivity
public class MyActivity extends Activity {

  // The name of the extra will be "myMessage"
  @Extra
  String myMessage;
}

请注意,您可以使用意图构建器传递Extra的值。

MyActivity_.intent().myMessage("hello").start() ;

处理onNewIntent()

AndroidAnnotations会覆写setIntent()方法,并当你调用setIntent()方法时会根据给定的意图自动设置extra的值。 这允许你从onNewIntent()方法中通过调用setIntent()方法自动注入extra的值。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
@EActivity
public class MyActivity extends Activity {

    @Extra("myStringExtra")
    String myMessage;

    @Override
    protected void onNewIntent(Intent intent) {
        setIntent(intent);
    }
}

##在注入extras之后执行代码 如果你需要执行注入extras之后的代码,你应该使用@AfterExtras注释一些方法。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
@EActivity
public class MyClass {

  @Extra
  String someExtra;

  @Extra
  int anotherExtra;


  @AfterExtras
  public void doSomethingAfterExtrasInjection() {
    // someExtra and anotherExtra are set to the value contained in the incoming intent
    // if an intent does not contain one of the extra values the field remains unchanged
  }

}

警告

如果父类和子类有@AfterViews,@AfterInject或@AfterExtras名称相同的带注释的方法,生成的代码将会有BUG。查看更多细节问题# 591。 同时,当我们调用那些@AfterViews、@AfterInject、@AfterExtras注解的方法时会有一个调用顺序,但是如果@AfterView、@AfterInject、@AfterExtras 注解的方法是同名的,那就不能确保这几个方法的调用顺序了 ,请看( issue #810)。 关于这些注解的方法调用顺序,你可以看我的这篇博客译文:@AfterXXX 调用顺序