सवाल एडाप्टर से पैरेंट रीसाइक्लर व्यू का संदर्भ प्राप्त करने का कोई बेहतर तरीका है?


मेरे पास एक उपयोग केस है जहां मुझे माता-पिता के संदर्भ की आवश्यकता है RecyclerView विशेष रूप से अंदर के एडाप्टर के अंदर से onBindViewHolder तरीका। अब तक मैं जो कर रहा हूं वह इसे एक निजी वर्ग के सदस्य को सौंप रहा है onCreateViewHolder विधि के साथ गुजरने की विधि viewGroup parent ऐसा तर्क है:

private ViewGroup mParent;

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

और माता-पिता का संदर्भ देना RecyclerView में onBindViewHolder इस तरह:

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

क्या ऐसा करने का कोई बेहतर तरीका है? शायद RecyclerView.Adapter एक तरीका है कि मैं याद किया हो सकता है?


44
2017-07-06 14:30


मूल




जवाब:


वास्तव में एक विशिष्ट विधि है जो रीसाइक्लर व्यू के साथ कॉलबैक जो एडाप्टर से जुड़ी है। बसAttachedToRecylerView () विधि को ओवरराइड करें।

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

117
2017-07-06 15:50



दस्तावेज में मुझे यह कैसे याद आया! धन्यवाद, यह वही है जो मैं ढूंढ रहा था! - nabir
दस्तावेज कहता है: "ध्यान रखें कि एक ही एडाप्टर एकाधिक रीसाइक्लिंग व्यू द्वारा देखा जा सकता है।" developer.android.com/reference/android/support/v7/widget/...  अगर मैं गलत हूं तो मुझे सही करें लेकिन अगर आप एडाप्टर को एक से अधिक रीसाइक्लर व्यू को असाइन करते हैं तो यह समस्या पैदा नहीं करेगा? - UnTraDe
@UnTraDe हाँ यह होगा। उपरोक्त कोड पिछले RecyclerView उदाहरण को ओवरराइट करेगा। एक समाधान संलग्न RecyclerView उदाहरणों की एक सूची बनाए रखने औरDetachedFromRecyclerView (..) में उदाहरणों को हटाने के लिए होगा। यदि संभव हो, तो इससे बचने के लिए सबसे अच्छा होगा और केवल प्रत्येक RecyclerView उदाहरण के लिए एडाप्टर का उदाहरण बनाएं। - masterwok


शायद आप व्यूल्डर के अंदर एक इंटरफ़ेस बनाना चाहते हैं और माता-पिता को पास करना चाहते हैं और इसे वहां कार्यान्वित करना चाहते हैं।


1
2017-07-06 14:39





एक और तरीका कन्स्ट्रक्टर में एक संदर्भ पारित कर रहा है, उदा।

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

1
2017-07-06 14:51