2015-07-06 13 views
32

Ho un caso d'uso in cui ho bisogno di un riferimento al genitore RecyclerView dall'interno dell'adattatore, in particolare all'interno del metodo onBindViewHolder. Finora quello che sto facendo è di assegnarlo a un membro della classe privata nel metodo onCreateViewHolder passando lungo la viewGroup parent arg in questo modo:Esiste un modo migliore per ottenere un riferimento al parente RecyclerView dall'adattatore?

private ViewGroup mParent; 

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

E fa riferimento il genitore RecyclerView in onBindViewHolder come questo:

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

C'è un modo migliore per farlo? Forse RecyclerView.Adapter ha un modo che forse ho perso?

risposta

84

Esiste in realtà un metodo specifico di richiamata con RecyclerView che si collega all'adattatore. Basta sovrascrivere il metodo 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.... 
    } 
+1

Come ho perso questo nella documentazione! Grazie, questo è esattamente quello che stavo cercando! – nabir

1

Probabilmente si desidera creare un'interfaccia all'interno di viewHolder e passare al genitore e implementarlo lì.

1

Un altro modo è passare un riferimento nel costruttore, ad es.

Problemi correlati