android - studio - butterknife recyclerview
RecyclerView.ViewHolder no puede enlazar la vista con ButterKnife (2)
Asegúrese de que si utiliza la biblioteca ButterKnife
para usar de esta manera
archivo build.gradle del proyecto
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath ''com.neenbedankt.gradle.plugins:android-apt:1.8''
}
}
Luego, aplique el complemento ''android-apt''
en su module-level build.gradle
y agregue las dependencias de Butter Knife:
apply plugin: ''android-apt''
android {
...
}
dependencies {
compile ''com.jakewharton:butterknife:8.2.1''
apt ''com.jakewharton:butterknife-compiler:8.2.1''
}
Estoy usando ButterKnife
para enlazar mis vistas en mi ViewHolder
. Mi código está abajo:
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);
}
}
}
Por alguna razón, en mi ViewHolder
todos los BindView
no hacen nada. Todos son nulos. Puedo confirmar con certeza que están en mi diseño. ¿Qué está mal con mi código anterior? Lo he utilizado de acuerdo con la documentación que figura aquí:
http://jakewharton.github.io/butterknife/#reset
¿Se requiere algo más? Estoy usando la versión ButterKnife
:
compile ''com.jakewharton:butterknife:8.2.1''
Si agrego la línea de abajo:
rowHeaderView = view.findViewById(R.id.row_header_view);
Es capaz de obtener la vista correctamente. ¿Pero cómo tiene sentido esto? ¿No se ButterKnife
utilizar ButterKnife
donde se puede usar findViewById
?
Actualización para octubre de 2016: probablemente ya no necesite apt y el complemento android-apt. La versión 2.2 del complemento Gradle de Android tiene una configuración de procesador de anotaciones que debería utilizar en su lugar.
En Android studio 2.2 en adelante, solo agrégalos a tu módulo build.gradle:
compile ''com.jakewharton:butterknife:8.4.0''
annotationProcessor ''com.jakewharton:butterknife-compiler:8.4.0''