0

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

4

1 に答える 1