2013-09-01 45 views
23

के लिए उनका उपयोग क्या किया जाता है मैंने खोज करने की कोशिश की लेकिन मैं अभी भी थोड़ा खो गया हूं। मैं आमतौर पर इंटरफेस या BroadcastReceiver के माध्यम से Activity के माध्यम से खंड संचार के लिए खंड करता हूं।एंड्रॉइड - getTargetFragment और setTargetFragment -

वैसे भी, मेरा प्रश्न getTargetFragment का उपयोग क्या है? क्या कोई उपयोग केस प्रदान कर सकता है या सिर्फ एक त्वरित उदाहरण प्रदान कर सकता हूं ताकि मैं इसका उपयोग समझ सकूं?

+1

http://stackoverflow.com/a/13733914/1093872 यहां एक और अच्छा उदाहरण है ... लेकिन इंटरफेस भी अच्छे हैं। –

+0

धन्यवाद ... यह सिर्फ एक टुकड़े के लिए एक जगह धारक की तरह दिखता है। इसलिए यदि मेरे पास एक टुकड़ा है और मैं लक्ष्य निर्धारित करता हूं तो मैं खंड को पुनर्प्राप्त करने के लिए getTarget का उपयोग कर सकता हूं। यह विचारों पर setTag के समान है। – j2emanue

+1

ब्रॉडकास्ट रिसीवर के बजाय, स्थानीय ब्रॉडकास्ट मैनेजर (यहां: http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html) का उपयोग करने पर विचार करें, या ईवेंट हैंडलिंग का अपना तंत्र बनाएं। –

उत्तर

27

उसी गतिविधि द्वारा होस्ट किए गए केस = 2 टुकड़े का उपयोग करें।

जहां startActivityForResult() 2 गतिविधियों के बीच संबंध स्थापित करता है, setTargetFragment() कॉलर/2 टुकड़ों के बीच संबंधों को परिभाषित करता है।

सेटटाइटलफ्रैगमेंट (लक्ष्य) "ज्ञात" खंड को परिणाम भेजने के लिए कहने देता है। इस मामले में onActivityResult() मैन्युअल रूप से कहा जाता है।

public class Caller extends Fragment 
    Fragment called = Called.newInstance() 
    called.setTargetFragment(this) 

public class Called extends DialogFragment 
    intent = amazingData 
    getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, intent) 
4

जो मैं दस्तावेज़ों को पढ़ने से दूर करने में सक्षम था, वह यह था कि ये विधियां किसी अन्य टुकड़े से डेटा तक पहुंचने का एक और तरीका है। यहां एक sample project है जिसे मैंने लिखा है जो इन विधियों का उपयोग करने के लिए एक एकल उपयोग केस प्रदर्शित करता है। मुझे यकीन है कि अधिक उपयोग के मामले हैं हालांकि ...

+0

@ j2emanue आपको कौन सा हिस्सा नहीं मिलता है? –

4

मुझे अंत में पता चला कि एक टुकड़े में सेट टाउन का उपयोग कैसे करें और साझा करना चाहते हैं। जब आप टुकड़े से टुकड़े तक संवाद करना चाहते हैं तो यह काफी उपयोगी है।

यहां एक उदाहरण है: मान लें कि आप एक संवाद दिखाना चाहते हैं और जब यह बंद हो जाता है तो आप कुछ कार्रवाई करना चाहते हैं।

तो अपने fragment1 में

कि संवाद आप ऐसा कर सकता है का उपयोग करेगा:

myDialogFragment.setTargetFragment(fragment1, myDialogFragment.REQ_CODE); 

और अपने टुकड़ा है कि संवाद आप इस तरह onActivityResults ओवरराइड करने के लिए की आवश्यकता होगी कहा जाता है में:

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if(requestCode == CoDDialogFragment.REQ_CODE) 
      exit(); //or whatever you want to do here 
    } 

और myDialogFragment में आप यह कर सकते हैं:

TellTargetYouGotResults(REQ_CODE); 

//... 
    private void TellTargetYouGotResults(int code) { 
     Fragment targetFragment = getTargetFragment(); // fragment1 in our case 
     if (targetFragment != null) { 
      targetFragment.onActivityResult(getTargetRequestCode(), code, null); 
     } 
    } 

जहां REQ_CO डीई निश्चित रूप से कोई int हो सकता है। टुकड़े संचार के टुकड़े के लिए बहुत उपयोगी है। लेकिन मैं अभी भी ईवेंट बस को पसंद करता हूं क्योंकि कभी-कभी लक्ष्य को डेटा भेजने के बाद उसका विचार पहले से ही नष्ट हो चुका है (इसे एक टुकड़ा शामिल करें) और फिर यदि आप एक्टिविटी रिसेट में दृश्य को अपडेट करने का प्रयास करते हैं तो आपको एक क्रैश मिलेगा। इसलिए मैं केवल डेटा को पास करने के लिए उपयोगी कहूंगा लेकिन यूआई को अपडेट नहीं करता जबतक कि आपने 'एड' खंड लेनदेन नहीं किया है और प्रतिस्थापन नहीं है (जो दृश्य को नष्ट कर देता है लेकिन राज्य रखता है)।

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