webentwicklung-frage-antwort-db.com.de

Gibt es eine bessere Möglichkeit, einen Verweis auf den übergeordneten RecyclerView vom Adapter abzurufen?

Ich habe einen Anwendungsfall, in dem ich einen Verweis auf das übergeordnete RecyclerView innerhalb des Adapters benötige, insbesondere innerhalb der onBindViewHolder -Methode. Bisher weise ich es einem privaten Klassenmitglied in der onCreateViewHolder -Methode zu, die das viewGroup parent arg wie folgt:

private ViewGroup mParent;

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

Und indem Sie das übergeordnete RecyclerView in onBindViewHolder wie folgt referenzieren:

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

Gibt es einen besseren Weg, dies zu tun? Vielleicht RecyclerView.Adapter hat eine Möglichkeit, die ich möglicherweise verpasst habe?

68
nabir

Es gibt tatsächlich eine bestimmte Methode, die einen Rückruf mit dem RecyclerView ausführt, der an den Adapter angehängt wird. Überschreiben Sie einfach die Methode 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

Eine andere Möglichkeit besteht darin, eine Referenz in den Konstruktor zu übergeben, z.

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