2015-07-06 6 views
32

Ich habe einen Anwendungsfall, wo ich einen Verweis auf das übergeordnete RecyclerView von innerhalb des Adapters, speziell innerhalb der onBindViewHolder Methode benötigen. Bis jetzt, was ich tue, ist die Zuweisung es zu einem privaten Klasse Mitglied im onCreateViewHolder Verfahren entlang der viewGroup parent arg vorbei wie so:Gibt es eine bessere Möglichkeit, einen Verweis auf den übergeordneten RecyclerView vom Adapter zu erhalten?

private ViewGroup mParent; 

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

und Referenzierung der Eltern RecyclerView in onBindViewHolder wie folgt aus:

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

Gibt es einen besseren Weg, dies zu tun? Vielleicht hat RecyclerView.Adapter einen Weg, den ich vielleicht verpasst habe?

Antwort

84

Es gibt tatsächlich eine bestimmte Methode, die mit dem RecyclerView, der an den Adapter anfügt, eine Rückrufaktion durchführt. Überschreiben Sie einfach die onAttachedToRecylerView() -Methode.

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.... 
    } 
+1

Wie habe ich das in der Dokumentation vermisst! Danke, genau das habe ich gesucht! – nabir

1

Wahrscheinlich möchten Sie eine Schnittstelle in ViewHolder erstellen und an Eltern übergeben und implementieren Sie es dort.

1

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