如何将@ViewById用于@EActivity之外的膨胀视图(R.layout.activity_x)

时间:2014-10-22 10:15:44

标签: android expandablelistview layout-inflater android-annotations findviewbyid

我在Android Studio的项目中使用Android Annotations 3.1,我正在使用可扩展列表视图。

我在这个列表中添加了一个标题:

View header = getLayoutInflater().inflate(R.layout.list_view_header, null);
txt_user = (TextView) header.findViewById(R.id.txt_user);
txt_user.setText(" ... "); 
mExpandableListView.addHeaderView(header);

问题

如何使用@ViewById将我的TextView设置为:

    - 避免使用findViewById

    - 更改文字

    - 然后在以下期间将其添加为标题:

@AfterViews
protected void init() {
 ....

}

如果我在使用init:

中的文本视图时在Activity中执行此操作
@ViewById
TextView txt_user;

它给出了空指针异常。

2 个答案:

答案 0 :(得分:2)

为什么不创建这样的自定义视图:

@EViewGroup(R.layout.list_view_header)
public class MyHeader extends LinearLayout {

     @ViewById(R.id.txt_user)
     protected TextView mTextView;

     public void setText(String text) {
         mTextView.setText(text);
     }
     public MyHeader(Context context) {
         super(context);
     }
}

然后,在Activity中,写下:

@EActivity(R.layout.activity_xxx)
public class MyActivity extends Activity {

    private MyHeader mHeader;

    @AfterViews
    protected void init() {
        mHeader = MyHeader_.build(this);
        mHeader.setText("...");
        mExpandableListView.addHeaderView(mHeader);
    }
}

答案 1 :(得分:0)

要在布局中使用用@ViewGroup签名的视图,您需要实现在其类中使用AttributSet的构造函数。

  

注意:请记住使用最后带有_(下划线)的生成类。   她必须在布局xml中声明。