Existe-t-il un meilleur moyen d’obtenir une référence au parent RecyclerView à partir de l’adaptateur?

J’ai un cas d’utilisation où j’ai besoin d’une référence au parent RecyclerView depuis l’intérieur de l’adaptateur, en particulier dans la méthode onBindViewHolder . Jusqu’à présent, ce que je fais, c’est l’atsortingbuer à un membre de classe privé dans la méthode onCreateViewHolder , en transmettant l’ viewGroup parent comme viewGroup parent :

 private ViewGroup mParent; @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // inflater logic. mParent = parent; } 

Et en faisant référence au parent RecyclerView dans onBindViewHolder comme ceci:

 @Override public void onBindViewHolder(ViewHolder holder, int position) { // binder logic. ((RecyclerView)mParent).blahBlahBlah(); } 

Existe-t-il une meilleure façon de le faire? Peut-être que RecyclerView.Adapter a un moyen que j’ai pu manquer?

Il existe en fait une méthode spécifique qui appelle avec RecyclerView qui se connecte à l’adaptateur. Remplacez simplement la méthode onAttachedToRecylerView ().

 public class Adapter_RV extends RecyclerView.Adapter{ 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.... } 

Vous voulez probablement créer une interface dans viewHolder et la transmettre au parent et l’implémenter ici.

Une autre manière consiste à passer une référence dans le constructeur, par exemple

 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) { ... } }