RecyclerView.ViewHolder无法使用ButterKnife绑定视图。

29

我使用 ButterKnife 将视图绑定到我的 ViewHolder 上。以下是我的代码:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

    private List<DataObject> data;

    public MyAdapter(List<DataObject> data) {
        this.data = data;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_layout, parent, false);
        return new ViewHolder(view);
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        @BindView(R.id.row_header_view) View rowHeaderView;
        @BindView(R.id.row_header_view_text) TextView headerTextView;

        @BindView(R.id.row_data_view) View rowDataView;
        @BindView(R.id.row_data_view_text) TextView rowDataTextView;
        @BindView(R.id.row_data_view_detail_text) TextView rowDataDetailTextView;

        public ViewHolder(View view) {
            super(view);
            ButterKnife.bind(this, view);
        }
    }
}
出于某些原因,在我的ViewHolder中,所有的BindView都没有起作用。它们都是null。我可以肯定地确认它们存在于我的布局中。我的代码有什么问题?我已经按照这里列出的文档使用了它:

http://jakewharton.github.io/butterknife/#reset

是否还需要其他东西? 我正在使用ButterKnife版本:

compile 'com.jakewharton:butterknife:8.2.1'
如果我添加如下行:
rowHeaderView = view.findViewById(R.id.row_header_view);

可以正确地获取视图。但这有什么意义呢?ButterKnife不是在findViewById适用的地方同样适用吗?


你是否有适当的 'com.jakewharton:butterknife-compiler:8.2.1' 依赖项? - dev.bmax
是的,它在我的Gradle文件中。 - KVISH
@KVISH,你能否在你的module.build中应用这样的插件 apply plugin: 'android-apt' - Harshad Pansuriya
2个回答

23

2016年10月更新:您可能不再需要apt和android-apt插件。 Android Gradle插件的2.2版本具有annotationProcessor配置,您应该改用它。

从Android Studio 2.2开始,只需在build.gradle模块中添加以下内容即可:

compile 'com.jakewharton:butterknife:8.4.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'

11

确保您已经使用了 ButterKnife 库,并按照以下方式使用:

在项目的 build.gradle 文件中:

buildscript {
  repositories {
    mavenCentral()
   }
  dependencies {
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
  }
}

然后,在您的 模块级别的build.gradle 中应用 'android-apt'插件,并添加Butter Knife依赖项:

apply plugin: 'android-apt'

android {
  ...
}

dependencies {
  compile 'com.jakewharton:butterknife:8.2.1'
  apt 'com.jakewharton:butterknife-compiler:8.2.1'
}

@Nullable 指的是可选字段。我的都在那里。这个答案是不正确的。 - KVISH
@KVISH,你能否在你的module.build文件中应用类似apply plugin: 'android-apt'的插件呢? - Harshad Pansuriya
啊,是的。那个地方确实有问题。我已经修复了。如果你更新你的答案,我会接受它。 - KVISH
@KVISH 很高兴能为您提供帮助。 - Harshad Pansuriya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接