Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用AndroidAnnotations库时视图何时被注入?_Android_Android Annotations - Fatal编程技术网

使用AndroidAnnotations库时视图何时被注入?

使用AndroidAnnotations库时视图何时被注入?,android,android-annotations,Android,Android Annotations,我想知道什么时候在AndroidAnnotations中注入带注释的视图。基本上,我想知道在onResume期间访问其中一个视图是否安全?我假设它们是在onCreate期间注射的,但希望得到确认 谢谢。确定注入何时发生的最简单方法是检查AndroidAnnotations生成的代码。对于您的示例,我制作了一个简单的活动和片段,如下所示: @EActivity(R.layout.activity\u main) 公共类MainActivity扩展了AppCompatActivity{ @ViewB

我想知道什么时候在AndroidAnnotations中注入带注释的视图。基本上,我想知道在onResume期间访问其中一个视图是否安全?我假设它们是在onCreate期间注射的,但希望得到确认


谢谢。

确定注入何时发生的最简单方法是检查AndroidAnnotations生成的代码。对于您的示例,我制作了一个简单的活动和片段,如下所示:

@EActivity(R.layout.activity\u main)
公共类MainActivity扩展了AppCompatActivity{
@ViewById(R.id.textView)
文本视图文本视图;
@后景
public void activityTestMethod(){
}
}
@EFragment(R.layout.fragment\u main)
公共类MainFragment扩展了片段{
@ViewById(R.id.imageView)
图像视图图像视图;
@后景
公共void fragmentTestMethod(){
}
}
然后运行
/gradlew app:assembleDebug
,强制AndroidAnnotations生成相应的类
MainActivity\u
MainFragment\u
。让我们先看一下
main活动
(不相关的代码省略):

public final class活动_
扩展主要活动
实现HasView、OnViewChangedListener
{
@凌驾
创建时的公共void(Bundle savedInstanceState){
OnViewChangedNotifier-previousNotifier=OnViewChangedNotifier.replaceNotifier(OnViewChangedNotifier_389;);
初始化(保存状态);
super.onCreate(savedInstanceState);
OnViewChangedNotifier.replaceNotifier(previousNotifier);
setContentView(R.layout.activity_main);
}
私有无效初始化(Bundle savedInstanceState){
OnViewChangedNotifier.registerOnViewChangedListener(此);
}
@凌驾
public void setContentView(int-layoutResID){
super.setContentView(layoutResID);
onViewChangedNotifier\ notifyViewChanged(此);
}
@凌驾
已更改视图上的公共void(HasViews HasViews){
this.textView=hasViews.internalFindViewById(R.id.textView);
activityTestMethod();
}
}
导致绑定视图和调用
@afterview
方法的事件顺序如下:

  • onCreate
    中,
    main活动
    实例注册为
    OnViewChangedNotifier
  • onCreate
    调用
    setContentView
  • setContentView
    调用
    notifyViewChanged
    ,触发对
    onViewChanged
    的(同步)调用
  • onViewChanged
    绑定用
    @ViewById
    注释的所有字段,然后调用用
    @afterview注释的所有方法
因此,
@ViewById
-注释视图在调用
onCreate
后被绑定并可用,并且
@afterview
-注释方法将在
onCreate
结束时和任何其他活动生命周期方法之前执行

main片段的情况与此类似

public final类main片段_
扩展com.stkent.aatest.main片段
实现HasView、OnViewChangedListener
{
@凌驾
创建时的公共void(Bundle savedInstanceState){
OnViewChangedNotifier-previousNotifier=OnViewChangedNotifier.replaceNotifier(OnViewChangedNotifier_389;);
初始化(保存状态);
super.onCreate(savedInstanceState);
OnViewChangedNotifier.replaceNotifier(previousNotifier);
}
私有无效初始化(Bundle savedInstanceState){
OnViewChangedNotifier.registerOnViewChangedListener(此);
}
@凌驾
已创建视图上的公共void(视图,捆绑保存状态){
super.onViewCreated(视图,savedInstanceState);
onViewChangedNotifier\ notifyViewChanged(此);
}
@凌驾
已更改视图上的公共void(HasViews HasViews){
this.imageView=hasViews.internalfindviewbyd(R.id.imageView);
fragmentTestMethod();
}
}
导致绑定视图和调用
@afterview
方法的事件顺序如下:

  • onCreate
    中,将
    MainFragment\uu
    实例注册为
    OnViewChangedNotifier
  • onViewCreated
    调用
    notifyViewChanged
    ,这会触发对
    onViewChanged
    的(同步)调用
  • onViewChanged
    绑定用
    @ViewById
    注释的所有字段,然后调用用
    @afterview注释的所有方法
因此,
@ViewById
-注释视图在调用
onViewCreated
后被绑定并可用,并且
@afterview
-注释方法将在
onViewCreated
结束时和任何其他片段生命周期方法之前执行


在我们的两个示例中,所有视图绑定都是在比onResume早得多的生命周期方法中执行的,因此您可以安全地在那里访问它们:)

确定注入何时发生的最简单方法是检查AndroidAnnotations生成的代码。对于您的示例,我制作了一个简单的活动和片段,如下所示:

@EActivity(R.layout.activity\u main)
公共类MainActivity扩展了AppCompatActivity{
@ViewById(R.id.textView)
文本视图文本视图;
@后景
public void activityTestMethod(){
}
}
@EFragment(R.layout.fragment\u main)
公共类MainFragment扩展了片段{
@ViewById(R.id.imageView)
图像视图图像视图;
@后景
公共void fragmentTestMethod(){
}
}
然后运行
/gradlew app:assembleDebug
,强制AndroidAnnotations生成相应的类
MainActivity\u
MainFragment\u
。让我们看看