对于膨胀的布局,注入的视图保持为null

时间:2012-07-02 10:41:33

标签: android-layout layout-inflater roboguice

我可以在要充气的布局中包含的元素上使用Roboguice @InjectView吗?我觉得元素首先被声明为@Nullable,因为在完成膨胀之前它们是未知的。但是在膨胀之后,元素仍然保持为空,直到“findViewById”完成。

举个例子: 我使用以下代码注入一个可以为null的textview(标题),它包含在title_layout中,将在主布局中膨胀:

@Nullable @InjectView(R.id.title) TextView title;
@InjectView(R.id.title_info) LinearLayout titleContainer;

然后在onCreate()方法中我这样做:

setContentView(R.layout.main);
inflater.inflate(R.layout.title_layout, titleContainer);

我有 main.xml

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
  <LinearLayout
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:id="@+id/title_info">
  </LinearLayout>
</LinearLayot>

title_layout.xml

  <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TextView
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:id="@+id/title" 
      android:text="my title" />
</LinearLayot>

即使在冒充title_layout之后,膨胀视图中的标题(TextView)始终为 null

这样做:

setContentView(R.layout.main);
inflater.inflate(R.layout.title_layout, titleContainer);
title = (TextView)findViewById(R.id.title);\

解决了这个问题。

有没有办法使用@InjectView?

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题 - 事实证明我正在扩展Activity而不是RoboActivity,所以它永远不会处理注射。