【问题标题】:RecyclerView.ViewHolder unable to bind view with ButterKnifeRecyclerView.ViewHolder 无法使用 ButterKnife 绑定视图
【发布时间】:2016-11-19 23:37:46
【问题描述】:

我正在使用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);

它能够正确获取视图。但这有什么意义呢? ButterKnifefindViewById 可用的地方不可用吗?

【问题讨论】:

  • 你有 apt 'com.jakewharton:butterknife-compiler:8.2.1' 依赖吗?
  • 是的,它在我的 gradle 文件中。
  • @KVISH 你能在你的module.build 中应用像apply plugin: 'android-apt' 这样的插件吗?

标签: android android-layout data-binding android-adapter butterknife


【解决方案1】:

2016 年 10 月更新:您可能不再需要 apt 和 android-apt 插件了。 2.2 版的 Android Gradle 插件有一个 annotationProcessor 配置,您应该改用它。

在 Android Studio 2.2 以后,只需将这些添加到您的 build.gradle 模块中:

compile 'com.jakewharton:butterknife:8.4.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'

【讨论】:

    【解决方案2】:

    确保如果你有使用 ButterKnife 库来使用这种方式

    build.gradle 项目文件

    buildscript {
      repositories {
        mavenCentral()
       }
      dependencies {
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
      }
    }
    

    然后,在 module-level build.gradle 中应用 'android-apt' 插件并添加 Butter Knife 依赖项:

    apply plugin: 'android-apt'
    
    android {
      ...
    }
    
    dependencies {
      compile 'com.jakewharton:butterknife:8.2.1'
      apt 'com.jakewharton:butterknife-compiler:8.2.1'
    }
    

    【讨论】:

    • @Nullable 指的是可选字段。我的都在那里。这个答案不正确。
    • @KVISH 你能在你的module.build中应用像apply plugin: 'android-apt'这样的插件吗?
    • 啊,是的。那是丢失的。我修好了它。如果你更新你的答案,我会接受。
    • @KVISH 很高兴为您提供帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多