RecyclerView.ViewHolder не может связать просмотр с 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);
Он способен правильно отображать представление. Но как это имеет смысл? Не используется ButterKnife
, где findViewById
можно использовать?
Ответы
Ответ 1
Убедитесь, что если вы используете библиотеку ButterKnife
, чтобы использовать этот способ
build.gradle файл проекта
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
Затем примените плагин 'android-apt'
в module-level build.gradle
и добавьте зависимости Butter Knife:
apply plugin: 'android-apt'
android {
...
}
dependencies {
compile 'com.jakewharton:butterknife:8.2.1'
apt 'com.jakewharton:butterknife-compiler:8.2.1'
}
Ответ 2
Обновление за октябрь 2016 года: Вероятно, вам больше не нужен apt и плагин android-apt. Версия 2.2 плагина Android Gradle имеет конфигурацию annotationProcessor, которую вы должны использовать вместо этого.
В Android-студии 2.2, просто добавьте их в свой модуль build.gradle:
compile 'com.jakewharton:butterknife:8.4.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'