web-dev-qa-db-ja.com

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);
        }
    }
}

何らかの理由で、私のViewHolderBindViewのすべては何もしません。それらはすべてヌルです。レイアウトに確実に含まれていることを確認できます。上記のコードの何が問題になっていますか?ここにリストされているドキュメントに従って使用しました:

http://jakewharton.github.io/butterknife/#reset

他に必要なものはありますか?私はButterKnifeバージョンを使用しています:

compile 'com.jakewharton:butterknife:8.2.1'

以下の行を追加すると:

rowHeaderView = view.findViewById(R.id.row_header_view);

ビューを適切に取得できます。しかし、これはどのように意味がありますか? ButterKnifeは使用可能ですが、findViewByIdは使用可能ではありませんか?

26
KVISH

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'
}
9
Ironman

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'
20
bastami82