0

我在其 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。

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

编辑:我的自定义视图上的子视图似乎为空,即使在utterknife.inject()活动上被调用也是如此。Butterknife.inject但是,如果我向我的方法添加调用onFinishInflate,我会收到一条错误消息java.lang.IllegalStateException: Required view with id '2131034112' for field 'listView' was not found

4

1 回答 1

0

你可以在之后做

ButterKnife.inject(this);

它在内部填充 listView 变量,因此它可供您使用。

确保您有

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

在你的活动中。

于 2014-07-30T08:04:22.783 回答