Есть ли лучший способ получить ссылку на родительский RecyclerView от адаптера?
у меня есть прецедент, когда мне нужна ссылка на родителя RecyclerView
изнутри адаптера, в частности внутри onBindViewHolder
метод. До сих пор я назначаю его частному члену класса в onCreateViewHolder
метод прохождения по viewGroup parent
arg так:
private ViewGroup mParent;
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// inflater logic.
mParent = parent;
}
и ссылки на родителя RecyclerView
на onBindViewHolder
такой:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
// binder logic.
((RecyclerView)mParent).blahBlahBlah();
}
есть ли лучший способ сделать это? Может быть!--8--> есть способ, который я, возможно, пропустил?
3 ответов
есть конкретный метод, который callsback с RecyclerView, который крепится к адаптеру. Просто переопределите метод onAttachedToRecylerView ().
public class Adapter_RV extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
RecyclerView mRecyclerView;
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
mRecyclerView = recyclerView;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
mRecyclerView....
}
Вероятно, вы хотите создать интерфейс внутри viewHolder и передать его родителю и реализовать его там.
другим способом является передача ссылки в конструкторе, например
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) {
...
}
}