AndroidAnnotations文档翻译:注入视图,Injecting Views
自此版本开始引入: AndroidAnnotations 1.0
@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 注解 的意思是,应当 在视图绑定完毕之后调用某个 方法 。
当 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 )。
关于各个注解对应 的方法的调用时间,可在 这里 找到。
自引版本开始引入: 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 opinionsHxLauncher: Launch Android applications by voice commands