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