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);
...
}
私のカスタムビューにはリストビューがあります。onFinishInflate
バターナイフを追加する前に、メソッドでリストビューのアダプターを設定していました。
@Override
protected void onFinishInflate() {
super.onFinishInflate();
...
listView.setAdapter(resultsAdapter);
}
ただし、Butterknife を追加してから、アダプターを設定した行に NPE が表示されます。その段階では listview が Null であるためです。
私の理解ではButterknife.inject()
、アクティビティのメソッドが呼び出されたときにのみビューがインスタンス化されますが、これはビューが膨張した後に発生します。私が理解できないのは、listView のアダプターをいつ設定する必要があるかということです。
編集:utterknife.inject()
アクティビティで呼び出された後でも、カスタム ビューの子ビューが null のようです。Butterknife.inject
ただし、メソッドへの呼び出しを追加するとonFinishInflate
、次のエラーが表示されますjava.lang.IllegalStateException: Required view with id '2131034112' for field 'listView' was not found