2011-12-21 14 views
94

मुझे पता है कि टुकड़ों का उपयोग क्यों करें और एंड्रॉइड डेवलपर साइट अच्छी तरह से बताती है। लेकिन ज्यादातर मामलों में मैं टैबलेट पर अलग-अलग हिस्सों को अपना विशेष व्यवहार और यूआई रखना चाहता हूं और मुझे नहीं पता कि टुकड़े कैसे मदद कर सकते हैं। ज्यादातर मामलों में मुझे लगता है कि यह 2 अलग-अलग गतिविधियां (टैबलेट के लिए 1 और हैंडसेट के लिए 1) बनाने और तीसरे वर्ग में सामान्य व्यवहार और घटनाओं को साझा करने के लिए तेज़ है। तो इसे ध्यान में रखते हुए मुझे टुकड़ों का उपयोग क्यों करना चाहिए?मुझे एंड्रॉइड एप्लिकेशन में टुकड़ों का उपयोग कब करना चाहिए? टुकड़ों का उपयोग क्यों करें?

उत्तर

69

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

नीचे पंक्ति: एक ही समय में स्क्रीन पर टुकड़े दो या दो से अधिक गतिविधियां हैं।

+61

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

+0

मिलता है, तो एक से अधिक गतिविधियों में दिखाई देने वाले खोज फ़ॉर्म के लिए टुकड़ों का उपयोग करने की सिफारिश की जाती है? – Muatik

+0

ओएमजी तो यह है कि जब मैं कुछ टैप करता हूं तो कुछ ऐप्स अब नए "दृश्य" को स्लाइड करते हैं? तो एक टुकड़े का उपयोग करने के लिए, क्या हमारे पास अभी एक मुख्य लेआउट फ़ाइल है (उदाहरण के लिए) और उस फ़ाइल whereever के अंदर '<फ्रेजमेंट कोड शामिल />' का उपयोग करें, जिसमें हम एक टुकड़ा शामिल करना चाहते हैं? और हो सकता है कि अगर हम हमेशा एक टुकड़ा नहीं चाहते हैं तो वहां छुपाएं और जरूरत पड़ने पर इसे दिखाएं या जरूरत पड़ने पर इंजेक्ट करें? – username

14

Google आपको हमेशा फ्रैगमेंट का उपयोग करने की सलाह देता है।

क्यों? यह आसान है:

सबसे सरल मामले में, टुकड़ों का उपयोग गतिविधियों के कंटेनरों की तरह किया जाता है।

आपको इसकी आवश्यकता क्यों है? फिर, यह आसान है।

एंड्रॉइड 4 (आईसीएस) स्मार्टफोन और टैबलेट दोनों का समर्थन करता है। इसका मतलब है कि एक ही स्मार्टफोन और टैबलेट पर एक ही एप्लीकेशन चल रहा है और वे बहुत अलग होने की संभावना है।

टैबलेट में बड़ी स्क्रीनें हैं जो खाली या अप्रयुक्त होंगी - जब तक कि आप इसे ठीक से असाइन नहीं करते।

इसका मतलब है- संपर्क सूची और संपर्क जानकारी जैसे एक गतिविधि पर दो टुकड़े डालना।

स्मैटफ़ोन संपर्क सूची प्रदर्शित करेगा, और एक संपर्क पर संपर्क की जानकारी प्रदर्शित करेगा।

टैबलेट पर, उपयोगकर्ता अभी भी सूची देखेगा और जानकारी इसके बगल में होगी।

2 एक स्क्रीन पर fragments- ....

स्मार्ट? हाँ ... वापस Android 1.6 करने के लिए नीचे संगत होना चाहिए ......


######################## #####################################

ठीक है, पहले से ही जानता था? फिर - बस हल किए गए मामले को समझने का प्रयास करें:

बहुत सी चीजें इस तरह से काम करती हैं- सूची & विवरण, मेनू और उप-मेनू, जानकारी, विस्तृत जानकारी और कुछ और विस्तृत जानकारी। आप इसे एक टैबलेट के लिए प्राकृतिक और चिकनी रखने का एक तरीका चाहते हैं, जिसे आप इस तरह से पूर्ववत करने की उम्मीद करते हैं, लेकिन स्मार्टफ़ोन को टैबलेट की तरह इसे प्रदर्शित करने की अपेक्षा नहीं कर सकता ...

इसे प्राप्त करें?

अधिक जानकारी के लिए this. मैं वास्तव में लगता है कि तुम सिर्फ अवधारणा को पकड़ने के लिए की जरूरत है की जाँच ....

+0

हाँ अवधारणा सरल इंटरफेस है, जहां विभिन्न क्रियाएँ सीधा संबंध है और हर गतिविधि नहीं है में clear..But है सरल एक है डेटा के कंटेनर .. टुकड़े टुकड़े वास्तव में जरूरी है? क्या मैं इससे बच सकता हूं? और किसी भी मामले में किसी अन्य परिप्रेक्ष्य से कार्यक्रम को अलग-अलग स्क्रीन पर चलाने के लिए अनुकूलित किया जाना चाहिए, इस तथ्य के बावजूद कि आप टुकड़ों का उपयोग करेंगे या नहीं। –

+1

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

+1

"Google आपको हमेशा फ्रैगमेंट्स का उपयोग करने की सलाह देता है।" मैं इसके साथ सहमत नहीं हूं। व्यक्तिगत रूप से मुझे लगता है कि यह तब उपयोगी होता है जब डिवाइस डिज़ाइन डॉट को एक आकार या दो पैन दृश्य दिखाता है, इसके आकार के अनुसार। – user1914692

55

लाभ मैं देख रहा हूँ जब टुकड़े का उपयोग कर रहे हैं:

  • तर्क के Encapsulation।
  • टुकड़े के जीवन चक्र का बेहतर संभाल।
  • अन्य गतिविधियों में पुन: प्रयोज्य।

कमियां मैं देख रहा हूँ कर रहे हैं:

  • अधिक कोड (उदाहरण के लिए, एक टुकड़ा प्रबंधक instantiating, टुकड़ा के कॉलबैक लेखन, टुकड़ा लेन-देन को जोड़ने) टुकड़े के बीच
  • संचार और गतिविधियों कठिन है। जैसा कि @jonney ने कहा था, आपको अपनी ऑब्जेक्ट्स को क्रमबद्ध करने के लिए एक पार्सल करने योग्य इंटरफ़ेस से निपटने की आवश्यकता होगी।

तो, जब एक टुकड़ा का उपयोग करने के लिए निर्णय लेने, मैं अपने आप को निम्नलिखित प्रश्न पूछें होगा:

  • गतिविधि के जीवनचक्र से अलग टुकड़ा के जीवन चक्र है?

यदि जीवन चक्र अलग है, तो आप एक टुकड़े का उपयोग करके जीवन चक्र का बेहतर संचालन प्राप्त करते हैं। उदाहरण के लिए, यदि आप टुकड़े को नष्ट करना चाहते हैं, लेकिन गतिविधि नहीं। ऐसा ही मामला है, जब आपके पास pager adapter है।

  • क्या कई गतिविधियों में टुकड़ा इस्तेमाल किया जा रहा है?

यदि आप एक टुकड़े का उपयोग करते हैं तो उपयोगकर्ता इनपुट ईवेंट पुन: प्रयोज्य होंगे।

  • क्या टुकड़ा और गतिविधि के बीच संचार की मात्रा छोटी है?

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

+0

यह केवल एक प्रोग्रामिंग मामला नहीं है। मुझे लगता है कि एक ऐप करना न केवल स्रोत कोड लिखता है बल्कि टेबलेट्स के लिए कुछ यूआई समस्याओं से निपटने के लिए है जो हैंडसेट की समस्याओं से अलग हैं, और ईमानदार होने के लिए मुझे वास्तव में बहुत पसंद नहीं है कि कैसे टुकड़े हल करना चाहिए स्क्रीन आकार के बीच का अंतर। ऐप करना वास्तव में कुछ अनावश्यक टुकड़ों के साथ खाली रिक्त स्थान भरने वाला नहीं है। यहां तक ​​कि प्रोग्रामिंग पॉइंट से भी, अगर मेरे हिस्सों में एक संवाद करने में परेशानी होती है, तो मैं कमजोर पाइपों के साथ संघर्ष करने की बजाए आम सामान के साथ गेटवे क्लास बनाना पसंद करता हूं। इस वाक्य के बारे में –

+0

"क्या टुकड़े का जीवन चक्र गतिविधि के जीवन चक्र से अलग है?"। मेरे पास बहुत सारे मामले हैं कि दृश्य का टुकड़ा जो एक अलग दृश्य समूह के अधीन है, वही जीवन चक्र है। लेकिन मैंने खंड का उपयोग किया क्योंकि मैं इसे कई स्थानों का उपयोग करना चाहता था और साथ ही मुझे जीवन चक्र से अवगत होना चाहिए और कुछ तर्क उस पर निर्भर करते हैं। जबकि अगर मैंने व्यूग्रुप का उपयोग किया तो मुझे दृश्य समूह को गतिविधि के जीवन चक्र के बारे में सूचित करने की आवश्यकता थी, जिसे कुछ कस्टम ऑन रीज्यूम विधि मैन्युअल रूप से बुलाया गया था। –

8

विशेषज्ञ आपको बताएंगे: "जब मैं यूआई देखता हूं, तो मुझे पता चलेगा कि Activity या Fragment" का उपयोग करना है या नहीं। शुरुआत में इसका कोई अर्थ नहीं होगा, लेकिन समय पर, आप वास्तव में यह बताने में सक्षम होंगे कि आपको Fragment की आवश्यकता है या नहीं।

एक अच्छा अभ्यास है जो मुझे मेरे लिए बहुत मददगार पाया। यह मेरे लिए हुआ जब मैं अपनी बेटी को कुछ समझाने की कोशिश कर रहा था।

अर्थात्, स्क्रीन का प्रतिनिधित्व करने वाले बॉक्स की कल्पना करें। क्या आप इस बॉक्स में एक और स्क्रीन लोड कर सकते हैं? यदि आप एक नए बॉक्स का उपयोग करते हैं, तो क्या आपको पहले बॉक्स से कई आइटम कॉपी करना होगा?यदि उत्तर हां है, तो आपको Fragments का उपयोग करना चाहिए, क्योंकि रूट Activity सभी डुप्लिकेट तत्वों को आपके पास बनाने में समय बचाने के लिए रख सकता है, और आप बस बॉक्स के हिस्सों को प्रतिस्थापित कर सकते हैं।

लेकिन को न भूलें कि आपको हमेशा एक बॉक्स कंटेनर (Activity) की आवश्यकता है या आपके हिस्से फैल जाएंगे। तो अंदर के हिस्सों के साथ एक बॉक्स।

ध्यान रखें कि बॉक्स का दुरुपयोग न करें। एंड्रॉइड यूएक्स विशेषज्ञ सलाह देते हैं (आप उन्हें YouTube पर पा सकते हैं) जब हमें स्पष्ट रूप से एक Fragment का उपयोग करने के लिए Activity लोड करना चाहिए (जैसे कि जब हम नेविगेशन ड्रॉवर के साथ सौदा करते हैं तो श्रेणियां हैं)। एक बार जब आप Fragments के साथ सहज महसूस करते हैं, तो आप उनके सभी वीडियो देख सकते हैं। और भी वे अनिवार्य सामग्री हैं।

आप अभी अपने यूआई को देखो और यह पता लगाने अगर आप एक Activity या एक Fragment की जरूरत कर सकते हैं? क्या आपको एक नया परिप्रेक्ष्य मिला? मुझे लगता है तुमने किया था। :)

+1

यह [इस] (http://stackoverflow.com/a/25993052/2057291) विषय से एक डुप्लिकेट है। उसी लेखक, उसी दिन, अंतर के कुछ ही मिनट। – tommus

4

ऐतिहासिक रूप से एक एंड्रॉइड ऐप में प्रत्येक स्क्रीन को एक अलग गतिविधि के रूप में लागू किया गया था। यह स्क्रीन के बीच जानकारी पास करने में एक चुनौती बनाता है क्योंकि एंड्रॉइड इंटेंट तंत्र सीधे गतिविधियों के बीच एक संदर्भ प्रकार (यानी ऑब्जेक्ट) पास करने की अनुमति नहीं देता है। इसके बजाय ऑब्जेक्ट को क्रमबद्ध किया जाना चाहिए या उपलब्ध वैश्विक स्तर पर सुलभ संदर्भ होना चाहिए।

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

https://softwareengineering.stackexchange.com/questions/244771/why-use-android-fragments

0

टुकड़ा प्राथमिक समर्थन और अधिक गतिशील & बड़े यूआई Tablet.Because गोली स्क्रीन की तरह स्क्रीन सामान्य हैंडसेट की तुलना में बहुत बड़ा है। & इंटरचेंज UI घटक को गठबंधन करने के लिए और अधिक जगह है।

फ्रैगमेंट दृश्य पदानुक्रम में इस तरह के जटिल परिवर्तन की आवश्यकता के बिना ऐसे डिज़ाइन की अनुमति देता है।

टुकड़ा में विभाजित गतिविधि लेआउट करके, हम रनटाइम पर गतिविधि की उपस्थिति संशोधित करने में सक्षम हो जाते हैं

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