Mam przypadek użycia, w którym potrzebuję odwołania do rodzica RecyclerView
z wnętrza adaptera, a konkretnie z wnętrza onBindViewHolder
metody. Do tej pory przypisuję go do członka klasy prywatnej w onCreateViewHolder
metodzie przekazującej viewGroup parent
argument w następujący sposób:
private ViewGroup mParent;
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// inflater logic.
mParent = parent;
}
I odnosząc się do rodzica RecyclerView
w onBindViewHolder
ten sposób:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
// binder logic.
((RecyclerView)mParent).blahBlahBlah();
}
Czy jest lepszy sposób na zrobienie tego? Może RecyclerView.Adapter
ma sposób, który mogłem przegapić?
Innym sposobem jest przekazanie referencji w konstruktorze, np
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) { ... } }
źródło