Tengo un caso de uso en el que necesito una referencia al padre RecyclerView
desde el interior del adaptador, específicamente dentro del onBindViewHolder
método. Hasta ahora, lo que estoy haciendo es asignarlo a un miembro de la clase privada en el onCreateViewHolder
método que pasa a lo largo del viewGroup parent
argumento así:
private ViewGroup mParent;
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// inflater logic.
mParent = parent;
}
Y haciendo referencia al padre RecyclerView
de onBindViewHolder
esta manera:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
// binder logic.
((RecyclerView)mParent).blahBlahBlah();
}
¿Existe una forma mejor de hacer esto? ¿Quizás RecyclerView.Adapter
tiene un camino que quizás me haya perdido?
Otra forma es pasar una referencia en el constructor, por ejemplo
public final class MyAdapter extends RecyclerView.Adapper { private final recyclerView; public MyAdapter(@NonNull RecyclerView recyclerView) { this.recyclerView = recyclerView; } ... @Override public void onBindViewHolder(ViewHolder holder, int position) { ... } }
fuente