RecyclerView.ViewHolder无法使用ButterKnife绑定视图

时间:2016-07-17 06:16:29

标签: android android-layout data-binding android-adapter 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所有ButterKnife都没有做任何事情。它们都是空的。我可以肯定地证实他们在我的布局中。我的上述代码有什么问题?我按照此处列出的文档使用了它:

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

还有其他要求吗?我使用compile 'com.jakewharton:butterknife:8.2.1' 版本:

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

如果我添加以下行:

ButterKnife

它能够正确地获得视图。但这有什么意义呢?在findViewById可用的地方,Function OffsetCell(col_offset, row_offset) oSel = ThisComponent.getCurrentSelection() oCellAddress = oSel.getCellByPosition(0, 0).getCellAddress() oSheet = ThisComponent.CurrentController.ActiveSheet() OffsetCell = oSheet.getCellByPosition( _ oCellAddress.Column + col_offset, _ oCellAddress.Row + row_offset) End Function 是否可以使用?

2 个答案:

答案 0 :(得分:20)

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'

答案 1 :(得分:9)

如果您使用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'
}