web-dev-qa-db-fra.com

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

J'ai un cas d'utilisation où j'ai besoin d'une référence au parent RecyclerView depuis l'adaptateur, en particulier dans la méthode onBindViewHolder. Jusqu’à présent, je l’assigne à un membre privé de la classe dans la méthode onCreateViewHolder en transmettant le viewGroup parent argument comme suit:

private ViewGroup mParent;

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

Et référençant le 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 RecyclerView.Adapter a une manière que j'ai peut-être ratée?

68
nabir

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

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....
    }
167
NameSpace

Une autre méthode consiste à transmettre une référence dans le constructeur, par ex.

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