我的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
答案 0 :(得分:0)
您可以在
之后立即执行此操作ButterKnife.inject(本);
在内部填充listView变量,因此它可供您使用。
确保您有
@InjectView(R.id.raceResults)
AndroidRaceResultsView listView;
在你的活动中。