RecyclerView.ViewHolder 无法使用 ButterKnife 绑定视图
RecyclerView.ViewHolder unable to bind view with ButterKnife
我正在使用 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
都什么都不做。它们都是空的。我可以肯定地确认它们在我的布局中。我上面的代码有什么问题?我按照此处列出的文档使用它:
http://jakewharton.github.io/butterknife/#reset
还有什么要求吗?我正在使用 ButterKnife
版本:
compile 'com.jakewharton:butterknife:8.2.1'
如果我添加以下行:
rowHeaderView = view.findViewById(R.id.row_header_view);
能够正常获取视图。但这有什么意义呢?在findViewById
可用的地方ButterKnife
不可用吗?
确保如果你使用了ButterKnife
库来使用这种方式
build.gradle 项目文件
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
然后,在 module-level 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'
}
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'
我正在使用 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
都什么都不做。它们都是空的。我可以肯定地确认它们在我的布局中。我上面的代码有什么问题?我按照此处列出的文档使用它:
http://jakewharton.github.io/butterknife/#reset
还有什么要求吗?我正在使用 ButterKnife
版本:
compile 'com.jakewharton:butterknife:8.2.1'
如果我添加以下行:
rowHeaderView = view.findViewById(R.id.row_header_view);
能够正常获取视图。但这有什么意义呢?在findViewById
可用的地方ButterKnife
不可用吗?
确保如果你使用了ButterKnife
库来使用这种方式
build.gradle 项目文件
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
然后,在 module-level 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'
}
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'