无法让@ViewById在@EBean中工作。
@EActivity(R.layout.data_layout)
public class MyActivity extends Activity {
@Bean
MyEbean bean;
@AfterViews
public void setupView() {
bean.loadData("Test name");
}
}
@EBean
public class MyEbean {
@RootContext
context;
@ViewById(R.id.name_field)
TextView nameField;
public void loadData(String name) {
nameField.setText(name);
}
}
loadData()中的“ nameField”为空。同时如果我在loadData()中执行此操作
nameField = (TextView)((Activity) context).findViewById(R.id.name_field);
都很好。因此,视图肯定在那里。另外,如果我从改型回调(即延迟后)调用此方法,则会自动填充“名称”。我在那做错了什么吗?
我正在使用Android Annotations 3.0.1。
最佳答案
@EBean
带注释的类不应做任何与视图相关的工作,因为它们可以注入到每个增强类中(即,用@EService
,@EBean
,@EActivity
,...进行注释)。
如果您能够在通过findViewById
检索的上下文中执行@RootContext
,那仅仅是因为-在这种情况下-赋予bean的上下文就是活动。但是根据注入的位置,也可以是ApplicationContext或链接到另一个活动性/布局的Context。