J'utilise ButterKnife
pour lier mes vues sur mon ViewHolder
. Mon code est ci-dessous:
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);
}
}
}
Pour une raison quelconque, dans mon ViewHolder
tous les BindView
ne font rien. Ils sont tous nuls. Je peux confirmer avec certitude qu'ils sont dans ma mise en page. Quel est le problème avec mon code ci-dessus? Je l'ai utilisé selon la documentation listée ici:
http://jakewharton.github.io/butterknife/#reset
Y a-t-il autre chose requis? J'utilise la version ButterKnife
:
compile 'com.jakewharton:butterknife:8.2.1'
Si j'ajoute la ligne ci-dessous:
rowHeaderView = view.findViewById(R.id.row_header_view);
Il est capable d'obtenir correctement la vue. Mais comment cela a-t-il un sens? ButterKnife
n'est pas utilisable où findViewById
est utilisable?
Assurez-vous que si vous avez utilisé la bibliothèque ButterKnife
pour utiliser de cette façon
build.gradle fichier du projet
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.neenbedankt.gradle.plugins:Android-apt:1.8'
}
}
Ensuite, appliquez le 'Android-apt'
plugin dans votre module-level build.gradle
et ajoutez les dépendances de Butter Knife:
apply plugin: 'Android-apt'
Android {
...
}
dependencies {
compile 'com.jakewharton:butterknife:8.2.1'
apt 'com.jakewharton:butterknife-compiler:8.2.1'
}
Mise à jour d'octobre 2016: Vous n'avez probablement plus besoin d'apt et du plugin Android-apt. La version 2.2 du plug-in Android Gradle a une configuration d'annotationProcessor que vous devriez utiliser à la place.
Dans Android studio 2.2 et ultérieur, ajoutez-les simplement sur votre module build.gradle:
compile 'com.jakewharton:butterknife:8.4.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'