我有一个活动与自定义视图在其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;