2014-08-28 15 views
5

टुकड़ा-टुकड़ा बातचीत (here और here बताया गया है) के लिए एंड्रॉयड सर्वोत्तम प्रथाओं Activity बलों एक श्रोता बच्चे टुकड़ा द्वारा परिभाषित लागू करने के लिए। Activity तब टुकड़ों के बीच संचार का प्रबंधन करता है।एंड्रॉयड नेस्टेड टुकड़ा-टुकड़ा बातचीत

मेरी समझ से यह एक दूसरे से टुकड़े टुकड़े टुकड़े रखना है। हालांकि,

  1. यह भी नेस्ट टुकड़े के लिए मामला है? मैं कल्पना कर सकता हूं कि यह घोंसला वाले टुकड़े के लिए गतिविधि के बजाए सीधे इसके मूल खंड के बारे में रिपोर्ट करने के लिए समझ में आ सकता है।

  2. यदि किसी नेस्टेड टुकड़े के माता-पिता के टुकड़े इसके श्रोता को लागू करते हैं, तो यह करने के लिए एक (या किसी को) माता-पिता के टुकड़े की आवश्यकता होगी। दूसरे शब्दों में, निम्नलिखित के लिए, लेकिन Fragments के लिए प्रतिमान के लिए एक समान है:

    @Override 
    public void onAttach(Activity activity) { 
        super.onAttach(activity); 
    
        try { 
         mCallback = (OnHeadlineSelectedListener) activity; 
        } catch (ClassCastException e) { 
         throw new ClassCastException(activity.toString() 
           + " must implement OnHeadlineSelectedListener"); 
        } 
    } 
    

उत्तर

1

जब तक आप टुकड़ा में एक इंटरफेस को परिभाषित के रूप में, आप माता-पिता या अभिभावक गतिविधि टुकड़ा लागू हो सकता है। ऐसा कोई नियम नहीं है जो कहता है कि टुकड़े को बच्चे के टुकड़े के इंटरफेस को लागू नहीं करना चाहिए। एक उदाहरण जहां यह समझ में आता है कि खंड ए में दो बच्चे हैं Fragments B, C. ए बी का इंटरफ़ेस लागू करता है, जब ए को कॉल वापस मिल जाता है, तो उसे खंड सी को अपडेट करने की आवश्यकता हो सकती है। गतिविधि के साथ बिल्कुल वही बात, केवल अलग स्तर।

+0

हालांकि, प्रश्न में पोस्ट किए गए Google लिंक में वर्णित तरीका इसे खंडन के 'onAttach()' का उपयोग करके श्रोता को जोड़कर' गतिविधि 'होने के लिए प्रोत्साहित करता है और यदि कोई त्रुटि नहीं देता है। – bcorso

+0

दस्तावेज़ प्रोत्साहित करता है कि टुकड़ा सीधे किसी अन्य खंड के साथ संवाद नहीं करना चाहिए। ऐसा नहीं है कि यह एक गतिविधि होनी चाहिए। – CChi

+1

क्या कोई विशेष कारण है कि Google 'गतिविधि' द्वारा लागू नहीं किया गया है, तो 'अपवाद' को फेंकने का सुझाव देता है। क्या मुझे बस उस कोड को हटा देना चाहिए? – bcorso

0

आप getParentFragment() का उपयोग कर बच्चे/अभिभावक इंटरैक्शन के लिए समान पैटर्न लागू कर सकते हैं। अभिभावक खंड का अर्थ है कि किसी भी टुकड़े को अपने चाइल्डफ्रैगमेंट मैनेजर के माध्यम से जोड़ा गया है। यदि यह टुकड़ा सीधे एक गतिविधि से जुड़ा हुआ है, तो यह विधि शून्य हो जाती है।

4

अगर कोई एक कार्यान्वयन है कि माता-पिता संदर्भ सुनिश्चित करता है का एक उदाहरण चाहते थे, जबकि देखभाल नहीं है कि क्या यह एक गतिविधि या टुकड़ा है, मेरे लिए काम किया निम्न कॉलबैक लागू करता है:

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    if (context instanceof Callbacks) { 
     mCallbacks = (Callbacks) context; 
    } else { 
     if (getParentFragment() != null && getParentFragment() instanceof Callbacks) { 
      mCallbacks = (Callbacks) getParentFragment(); 
     } else { 
      throw new RuntimeException(context.toString() 
        + " must implement " + TAG + ".Callbacks"); 
     } 
    } 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
    mCallbacks = null; 
} 

का आनंद लें!

संबंधित मुद्दे