无法让@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。

10-08 16:28