Fragment और FragmentActivity में क्या अंतर है?


160

मेरा प्रश्न स्पष्ट वंशानुगत मतभेदों के अलावा है, मुख्य अंतर क्या हैं Fragmentऔर FragmentActivity? प्रत्येक वर्ग के लिए सबसे उपयुक्त कौन से परिदृश्य हैं? मैं यह समझने की कोशिश कर रहा हूं कि इन दोनों वर्गों का अस्तित्व क्यों है ...

जवाबों:


280

A Fragmentका एक भाग है Activity, जिसमें:

  • इसका अपना जीवनचक्र है
  • अपने स्वयं के इनपुट ईवेंट प्राप्त करता है
  • Activityचल रहा है, जबकि जोड़ा या हटाया जा सकता है।

एक Fragmentहमेशा एक में सन्निहित होना चाहिए Activity

Fragmentsहनीकोम्ब (3.0) से पहले एपीआई का हिस्सा नहीं हैं। यदि आप Fragmentsहनीकोम्ब से पहले प्लेटफ़ॉर्म संस्करण को लक्षित करने वाले ऐप में उपयोग करना चाहते हैं , तो आपको अपने प्रोजेक्ट में सपोर्ट पैकेज जोड़ना होगा और FragmentActivityअपने होल्ड करने के लिए प्लेटफ़ॉर्म का उपयोग करना होगा FragmentsFragmentActivityवर्ग से निपटने के लिए एक API है Fragments, जबकि Activityवर्ग, मधुकोश करने से पहले, नहीं करता है।

यदि आपका प्रोजेक्ट केवल हनीकोम्ब या नए को टारगेट कर रहा है, तो आपको अपना होल्ड करने के लिए उपयोग करना चाहिए ActivityFragmentActivityकि Fragments

कुछ विवरण:

के android.app.Fragmentसाथ प्रयोग करें Activity। के android.support.v4.app.Fragmentसाथ प्रयोग करें FragmentActivity। समर्थन पैकेज Fragmentको न जोड़ें Activityक्योंकि इससे अपवाद को फेंक दिया जाएगा।

के साथ सावधान रहने की बात: FragmentManagerऔर LoaderManagerFragmentActivity के लिए अलग समर्थन संस्करण हैं:

यदि आप Fragmentएक Activity(हनीकोम्ब और अप) में एक का उपयोग कर रहे हैं , तो कॉल करें

  • getFragmentManager() लेना android.app.FragmentManager
  • getLoaderManager() लेना android.app.LoaderManager

यदि आप (प्री-हनीकोम्ब) Fragmentएक का उपयोग कर रहे हैं FragmentActivity, तो कॉल करें:

  • getSupportFragmentManager()पाने के लिए android.support.v4.app.FragmentManager
  • getSupportLoaderManager() लेना android.support.v4.app.LoaderManager

हां, मत करो

//don't do this
myFragmentActivity.getLoaderManager(); 
//instead do this:
myFragmentActivity.getSupportLoaderManager();

या

//don't do this:
android.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager();
//instead do this:
android.support.v4.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager()

यह जानने के लिए भी उपयोगी है कि एक खंड में एम्बेडेड होना है, जबकि लेआउट Activityका हिस्सा होना जरूरी नहीं है Activity। यह गतिविधि के लिए एक अदृश्य कार्यकर्ता के रूप में इस्तेमाल किया जा सकता है, जिसमें स्वयं का कोई UI नहीं है।


6
हालांकि, गतिविधि के लेआउट का हिस्सा बनने के लिए एक टुकड़े की आवश्यकता नहीं है; आप गतिविधि के लिए एक अदृश्य कार्यकर्ता के रूप में अपने स्वयं के यूआई के बिना एक टुकड़े का उपयोग कर सकते हैं।
uzay95

1
@ uzay95 इसे इंगित करने के लिए धन्यवाद। मैंने इसका उल्लेख करने के लिए अंत में एक खंड जोड़ा।
गुन्नार कार्ल्ससन

@GunnarKarlsson क्या हम टुकड़े को खंड में जोड़ देंगे?
धस्नीम

2
अगर आप अपने ऐप को 3.0 से कम के एंड्रॉइड वर्जन पर काम करना चाहते हैं तो @Dhasneem आप एक FragmentActivity में एक फ्रैगमेंट जोड़ते हैं। अन्यथा आप किसी गतिविधि में एक फ़्रैगमेंट जोड़ते हैं।
गुन्नार कार्लसन

2
धन्यवाद! इससे मेरी समस्या हल हो गई! अब मुझे पता है कि Facebook लॉगिन बटन जोड़ने के बाद मेरा ऐप (एक्टिविटी के साथ लिखा हुआ) हमेशा ऑनक्रिट में क्रैश होता है (वे अपने उदाहरण में android.support.v4.app.Fragment का उपयोग करते हैं)। बेशक दुर्घटना के अन्य कारण भी हैं। लेकिन आपका जवाब उन्हें एक साथ रखने के लिए अंतिम टुकड़ा है।
च्लिंड

14

FragmentActivity टुकड़े टुकड़े के साथ हमारी क्लासिक गतिविधि है, इससे ज्यादा कुछ नहीं। इसलिए FragmentActivity की जरूरत है, जब एक Fragment एक्टिविटी से जुड़ी होगी।

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

देखो यहाँ अधिक जानकारी के लिए


1
BTW, आउट-ऑफ-द-डेट उत्तर, जो केवल उन ऐप्स पर लागू होता है जो API 11. से अधिक पुराने उपकरणों पर काम करना चाहते हैं
टूलमेकरसेव

@ टूलमेकरसेव आप अधिक जानकारी प्रदान कर सकते हैं? यदि संभव हो, तो क्या आप अप-टू-डेट संस्करण के साथ उत्तर को संपादित कर सकते हैं?
गोखन बारिस अकर

8

FragmentActivity को एक नियमित गतिविधि वर्ग के रूप में सोचें जो Fragments का समर्थन कर सकता है। हनीकॉम्ब से पहले, एक गतिविधि वर्ग सीधे फ्रैगमेंट को सुपरॉप्ट नहीं कर सकता था, इसलिए फ्रैगमेंट का उपयोग करने वाली गतिविधियों में इसकी आवश्यकता होती है।

यदि आपका लक्ष्य वितरण हनीकॉम्ब है और इससे परे आप इसके बजाय गतिविधि का विस्तार कर सकते हैं।

साथ ही एक खंड को एक 'उप-गतिविधि' माना जाना है। यह एक गतिविधि के बिना मौजूद नहीं हो सकता। हमेशा एक टुकड़ा एक उप-गतिविधि के रूप में सोचें और आपको अच्छा होना चाहिए। तो गतिविधि माता-पिता और टुकड़ा (बच्चे) प्रतीकात्मक संबंध का प्रकार होगा।


1

एक FragmentActivity एक तदर्थ गतिविधि है जिसमें Fragment होता है। इन कुछ शब्दों में मैंने आपको मुख्य महत्वपूर्ण परिवर्तनों में से एक समझाया है, जो कि एंड्रॉइड 3.0 (हनीकोम्ब) के साथ, एंड्रॉइड टीम ने एंड्रॉइड एसडीके में डाला है।

इन नई तरह की अवधारणा के साथ आपके कोड और लेआउट के टुकड़े अधिक लचीले और बनाए रखने योग्य हो जाते हैं। अगर आप google पर सर्च करते हैं तो बहुत सारे उदाहरण हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.