在使用Butterknife注入的自定义视图中的Listview上设置适配器

时间:2014-07-30 07:41:58

标签: android listview listadapter butterknife

我的Xml布局文件中有一个带有自定义视图的Activity:     

<com.example.androidmontreal.mvp.infrastructure.views.AndroidRaceResultsView
    android:id="@+id/raceResults"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"/>
    ...

在此活动的onCreate方法中,我使用Butterknife来注入我的观点:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mvp_main);

    ButterKnife.inject(this);

    ...

}

在我的自定义视图中,我有一个列表视图。在添加Butterknife之前,我曾在onFinishInflate方法中为listview设置适配器:

    @Override
protected void onFinishInflate() {
    super.onFinishInflate();

    ...

    listView.setAdapter(resultsAdapter);
}

自从添加Butterknife以来,我在设置适配器的行上获得了一个NPE,因为在那个阶段listview是Null。

我的理解是,只有在调用Activity中的Butterknife.inject()方法时才会实例化视图,但这会在视图膨胀后发生。我无法弄清楚的是我应该为listView设置适配器。

修改:即使在活动上调用了utterknife.inject()之后,我的自定义视图上的子视图似乎也为空。如果我向Butterknife.inject方法添加onFinishInflate的来电,我会收到错误消息java.lang.IllegalStateException: Required view with id '2131034112' for field 'listView' was not found

1 个答案:

答案 0 :(得分:0)

您可以在

之后立即执行此操作
  

ButterKnife.inject(本);

在内部填充listView变量,因此它可供您使用。

确保您有

@InjectView(R.id.raceResults)
AndroidRaceResultsView listView;

在你的活动中。