Есть ли лучший способ получить ссылку на родительский 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) {
        ...
    }
}
