2012-10-31 9 views
91

मान लीजिए कि मैं वर्तमान कंटेनर को किसी कंटेनर व्यू में दूसरे के साथ बदलना चाहता हूं। क्या यह प्रतिस्थापित करने के लिए बेहतर है ...एंड्रॉइड फ्रैगमेंट्स: छुपा/शो या जोड़ने/निकालने/प्रतिस्थापित करने के लिए कब उपयोग करें?

FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.replace(R.id.fragment_container, newFragment, null); 
    ft.commit(); 

... या निम्नलिखित, शो और छुपाएं के साथ?

FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.hide(oldFragment); 
    ft.show(newFragment); 
    ft.commit(); 

क्या यह और अधिक कुशल करने का एक तरीका है? इन विधियों का उपयोग कब करें, या वे शामिल टुकड़ों के जीवन चक्र को कैसे प्रभावित करते हैं, इस बारे में अधिक जानकारी नहीं मिल सकती है। धन्यवाद!

उत्तर

108

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

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

+3

का पालन करना चाहिए, हमारी आवश्यकताओं के लिए, टुकड़ा शुरू करना बहुत महंगा है, इसलिए हम शायद उस पर सहेजने के लिए 'hide()' और 'show() 'के साथ जाएं! इसके लिए धन्यवाद! –

+2

हाय, जब आप खिड़की से अलग कहते हैं, तो क्या आपका मतलब हैडेट() कॉलबैक कहा जाएगा? मैंने प्रयोग किया है, ऐसा लगता है यह मामला नहीं है। – GingerJim

+0

शायद उसका मतलब "अलग करना" था; एक टुकड़ा को अलग/अलग किया जा सकता है (अतिरिक्त रूप से जोड़ने/निकालने, दिखाने/छिपाने के लिए) – comeGetSome

5

आपने मूल रूप से स्वयं को उत्तर दिया। यदि आप प्रतिस्थापित करना चाहते हैं (इसलिए पुराने टुकड़े की आवश्यकता नहीं है) replace() का उपयोग करें यदि आप इसे अस्थायी रूप से छिपाना चाहते हैं तो hide() करें।

+0

मूल रूप से प्रतिस्थापित करता है सभी को हटा देता है। मुझे मिलान करने वाला छुपा नहीं मिला :( –

+0

@ एलिक एल्ज़िन-किलका मेरी गतिविधि में 3 तीन खंडों में 3 टुकड़े मैं नेटवर्क से डेटा प्राप्त करता हूं, जिस विधि को मुझे –

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