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