9

एंड्रॉइड डेवलपर ट्यूटोरियल मुझे डेटा और पास नहीं करने के लिए टुकड़ों की मेजबान गतिविधियों का उपयोग करने की सलाह देते हैं, तो एक सेट/लक्ष्य लक्ष्य खंड क्यों है?क्या हमें setTargetFragment() का उपयोग करना चाहिए? मैंने सोचा था कि टुकड़े एक दूसरे के साथ संवाद नहीं कर रहे हैं

मेरे आवेदन में अब तक एक मेजबान गतिविधि है, और एक टुकड़ा है, जिसमें एक बटन है जो DialogFragment लॉन्च करता है, जिसमें एक बटन है जो किसी अन्य DialogFragment लॉन्च करता है। setTargetFragment/getTargetFragment का उपयोग करके इस पूरे त्रासदी को कुछ हद तक भ्रमित कर दिया गया है, इसलिए मैं अपने मुख्य गतिविधि को अपने मुख्य खंड के कस्टम इंटरफ़ेस के माध्यम से DialogFragment.show विधियों को संभालने के लिए पुन: कार्यान्वित करने की सोच रहा हूं।

क्या यह सोचने का सही तरीका है? या setTargetFragment का उपयोग करने में कोई हानि नहीं है? क्या कोई इसका उपयोग करने के अच्छे और बुरे उदाहरण प्रदान कर सकता है?

उत्तर

5

मुझे नहीं लगता कि SetTargetFragment का उपयोग करने में निहित नुकसान है, हालांकि, मैं केवल इसे बहुत ही विशिष्ट परिस्थितियों में उपयोग करता हूं। उदाहरण के लिए, यदि लक्ष्य खंड केवल कभी भी टुकड़े द्वारा उपयोग किया जा रहा है (खाता ऑब्जेक्ट पुन: उपयोग करने और अपनी कक्षाओं को संभवतः पुन: प्रयोज्य बनाने के लिए डिज़ाइन करना) और फिर भी, कम से कम।

उन्हें बहुत अधिक उपयोग करके, आप जो देख रहे हैं उसके साथ समाप्त हो जाएंगे - भ्रमित कोड जो पालन करना और बनाए रखना मुश्किल है। शुरुआत में, अपनी गतिविधि के माध्यम से सब कुछ मार्शल करके आप एक "फ्लैट" पदानुक्रम बनाए रखते हैं जो पालन करना और बनाए रखना आसान है।

मुझे लगता है कि सेटटाइटलफ्रैगमेंट का उपयोग करने का निर्णय है या नहीं, कोडिंग-शैली/दार्शनिक है, जिसमें ज्ञान और अनुभव के साथ, यह सही या गलत लगता है। शायद आपके मामले पर, सबूत से कि आप अपने पुराने कोड पर सवाल कर रहे हैं, आप उस ज्ञान को प्राप्त कर रहे हैं :)

+0

में पाया गया है, मुझे लगता है कि मेरे गले मुझे सही बता रहे थे। सुझावों के लिए धन्यवाद। मैं अब पुन: कार्यान्वित करना शुरू कर दूंगा ...: पी –

+1

यदि आप कॉलबैक इंटरफ़ेस के माध्यम से सेटटाइटलफ्रैगमेंट का उपयोग करते हैं तो आप एक दूसरे के टुकड़े नहीं जोड़ेंगे - हालांकि यदि आप एक विशिष्ट टुकड़े टुकड़े करते हैं, तो मैं इसे एक बुरा विचार मानता हूं क्योंकि यह तंग पेश करता है युग्मन। – AgentKnopf

6

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

ConfirmationFragment frag = new ConfirmationFragment(); 
frag.setTargetFragment(this, 0); 
getFragmentManager().beginFragmentTransaction().add(R.id.container, frag).commit(); 
अब कुछ पुष्टि बटन पर

आप MainFragment से एक विधि आह्वान पर क्लिक करें::

कल्पना कीजिए कि आप जो आप MainFragment से के रूप में इतना जोड़ने पुष्टि टुकड़ा न किसी तरह का

((MainFragment)this.getTargetFragment()).onUserSelectedGoodButton(); 

यह सुंदर और सरल है, लेकिन यदि आप स्क्रीन को घुमाएंगे और किसी कारण से ConfirmationFragmentFragmentManager में MainFragment से पहले जोड़ा जाएगा, अपवाद फेंक दिया जाएगा, स्टेट यह कि टुकड़ा टुकड़ा टुकड़ा प्रबंधक

+0

आपको बस अपने लक्ष्य खंड को सहेजना है SaveInstanceState - फिर आप सहेजने पर इसे पुनर्प्राप्त कर सकते हैं अगर बचा है तो इंस्टेंस है! = शून्य। मुझे बेहोशी से पढ़ना याद है, कि अगर आप एक टुकड़े को प्रतिस्थापित करते हैं तो मूल समस्या को छिपाने और इसके ऊपर नया टुकड़ा जोड़ने के बजाय समस्याग्रस्त हो सकता है। – AgentKnopf

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