Подтвердить что ты не робот

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 можно использовать?

4b9b3361

Ответ 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'