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
は使用可能ではありませんか?
ButterKnife
ライブラリを使用してこの方法を使用していることを確認してください
build.gradleプロジェクトのファイル
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.neenbedankt.gradle.plugins:Android-apt:1.8'
}
}
次に、'Android-apt'
プラグインmodule-level build.gradle
そして、バターナイフの依存関係を追加します。
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'