usar studio recyclerview como bindview android android-layout data-binding android-adapter butterknife

android - studio - butterknife recyclerview



RecyclerView.ViewHolder no puede enlazar la vista con ButterKnife (2)

Asegúrese de que si utiliza la biblioteca ButterKnife para usar de esta manera

archivo build.gradle del proyecto

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

Luego, aplique el complemento ''android-apt'' en su module-level build.gradle y agregue las dependencias de Butter Knife:

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

Estoy usando ButterKnife para enlazar mis vistas en mi ViewHolder . Mi código está abajo:

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

Por alguna razón, en mi ViewHolder todos los BindView no hacen nada. Todos son nulos. Puedo confirmar con certeza que están en mi diseño. ¿Qué está mal con mi código anterior? Lo he utilizado de acuerdo con la documentación que figura aquí:

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

¿Se requiere algo más? Estoy usando la versión ButterKnife :

compile ''com.jakewharton:butterknife:8.2.1''

Si agrego la línea de abajo:

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

Es capaz de obtener la vista correctamente. ¿Pero cómo tiene sentido esto? ¿No se ButterKnife utilizar ButterKnife donde se puede usar findViewById ?


Actualización para octubre de 2016: probablemente ya no necesite apt y el complemento android-apt. La versión 2.2 del complemento Gradle de Android tiene una configuración de procesador de anotaciones que debería utilizar en su lugar.

En Android studio 2.2 en adelante, solo agrégalos a tu módulo build.gradle:

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