StupidBeauty
Read times:1665Posted at: - no title specified

AndroidAnnotations文档翻译:注入视图,Injecting Views

自此版本开始引入: AndroidAnnotations  1.0

@ViewById

@ViewById 注解 的意思是,某个活动 (activity) 字段 field 应当 被绑定到布局文件 中对应的视图(View)组件。 它与 findViewById() 方法是等价的。视图 的编号可在注解参数中设置,也就是说 @ViewById(R.id.myTextView) 。如果 未设置视图编号,则,会使用该字段的名字。 该字段 必须 不是 私有的。

用法示例:

@EActivity

public class MyActivity extends Activity {

// 注入R.id.myEditText

@ViewById

EditText myEditText;

@ViewById (R . id . myTextView)

TextView textView;

}

@AfterViews

@AfterViews 注解 的意思是,应当 在视图绑定完毕之后调用某个 方法

onCreate() 被调用时,那些 @ViewById 字段还未被设置。因此 妳可以利用 @AfterViews 来调用那些依赖 于视图的代码。

用法示例:

@EActivity(R.layout.main)

public class MyActivity extends Activity {

@ViewById

TextView myTextView;

@AfterViews

void updateTextWithDate () {

myTextView . setText( "Date: " + new Date());

}

[...]

妳可以使用 @AfterViews 来对 多个方法 进行注解。记住, 不应当 onCreate() 中使用任何的视图字段:

@EActivity(R.layout.main)

public class MyActivity extends Activity {

@ViewById

TextView myTextView;

@Override

public void onCreate (Bundle savedInstanceState ) {

super . onCreate(savedInstanceState);

// 不要这样写 !它会抛出一个NullPointerException 异常,因为此时myTextView 还未被赋值。

// myTextView.setText("Date: " + new Date());

}

[...]

注意 注入 是尽可能快地进行的 。因此 ,可以安全地在被@AfterViews注解过的方法中使用任何一个被@Extra或@InstanceState等命令注解过的字段,因为, 这些注解命令并不要求 有视图对象被赋值 (@AfterViews 是要求的 )。因此 ,妳可以安全地假定, 在被@AfterViews注入 的方法中, 这些字段已经被预期的值所初始化:

@EActivity(R.layout.main)

public class MyActivity extends Activity {

@ViewById

TextView myTextView;

@InstanceState

Integer textPosition;

@AfterViews

void updateTextPosition () {

myTextView . setSelection(textPosition); //设置myTextView 的光标位置

}

[...] // 后续 的代码中应当更新 textPosition 的值。

警告

如果 基类与子类之间使用 @AfterViews @AfterInject @AfterExtras 来注解了同名的方法,那么,所生成的代码会有漏洞 。参考 问题#591 以了解细节。

另外 ,尽管对于使用 @AfterViews -Inject -Extras 注解的函数之间,有明确的调用顺序,但是,对于 使用同一个 @AfterXXX 注解 的方法之间,没有明确的调用顺序(参考 问题#810 )。

关于各个注解对应 的方法的调用时间,可在 这里 找到。

@ViewsById

自引版本开始引入: AndroidAnnotations  3.1

这个注解与 @ViewById 类似,不过,它会对一堆视图( View )进行注入。 它可被用于包含着 android.view.View 子类的 java.util.List 字段上。注解 值应当是由R.id.*值组成的数组。 在注入完毕之后,具有指定编号 (ID) 并且 不为空(null)的那些视图( View ),会被加入到 该列表( List )中 ,这样做是为了避免在代码中进行空(null)指针检查

用法示例:

@EActivity

public class MyActivity extends Activity {

@ViewsById ({R . id . myTextView1, R . id . myOtherTextView})

List< TextView > textViews;

@AfterViews

void updateTextWithDate () {

for (TextView textView : textViews) {

textView . setText( "Date: " + new Date());

}

}

}

红包小魔女琳琳给您拜年

Your opinions

Your name:Email:Website url:Opinion content: