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



我有一个活动与自定义视图在其Xml布局文件:

<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);
    ...
}
在我的自定义视图中,我有一个listview。在添加Butterknife之前,我曾经在onFinishInflate方法中设置listview的适配器:
    @Override
protected void onFinishInflate() {
    super.onFinishInflate();
    ...
    listView.setAdapter(resultsAdapter);
}

自从添加Butterknife之后,我在设置适配器的地方得到了一个NPE,因为在那个阶段listview是Null。

我的理解是,视图只有在调用活动中的Butterknife.inject()方法时才实例化,但这发生在视图被膨胀之后。我不知道的是什么时候我应该为listView设置适配器

编辑:似乎我的自定义视图上的孩子视图是空的,即使在utterknife.inject()已被调用的活动。如果我添加对Butterknife.inject的调用到我的onFinishInflate方法,但是,我得到一个错误说java.lang.IllegalStateException: Required view with id '2131034112' for field 'listView' was not found

ButterKnife.inject(这);

在内部它填充listView变量,所以它可以为您使用。

确保你有

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

最新更新