2012-10-09 18 views
6

में व्यू या फ्रैगमेंट का उपयोग करें मेरे पास एक प्रश्न है कि व्यूपेजर के साथ व्यू या फ्रैगमेंट का उपयोग करना है या नहीं।ViewPager

पृष्ठभूमि: मेरे पास एक गतिविधि ए है जिसमें एक सूची दृश्य है। प्रत्येक ListView आइटम गतिविधि को खोलता है गतिविधि बी गतिविधि बी अलग-अलग सामग्री दिखाती है, इस पर निर्भर करता है कि कौन सी ListView आइटम गतिविधि ए गतिविधि टैब की सामग्री को सूची दृश्य में दिखाया गया है।

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

मेरा सवाल है, प्रत्येक दृष्टिकोण का उपयोग करने का क्या फायदा है? क्या मुझे ListView को फ्रैगमेंट में लाने की सभी परेशानी होनी चाहिए या केवल ViewView के साथ ListView का उपयोग करना चाहिए?

धन्यवाद

उत्तर

10

एक Fragment है एक उपयोगी दृष्टिकोण, मुझे लगता है, जब आप किसी खास View (या के समूह) के लिए कुछ यूआई व्यापार तर्क टाई करना चाहते हैं। जैसा कि आप जानते हैं, वह व्यक्तिगत Fragment का अपना जीवन चक्र कॉलबैक है और आगे, जैसे Activity होगा।

बल्कि एक भी PagerAdapter के माध्यम से एक भी Activity मेजबान कई ListView रों की तुलना में, यह क्लीनर क्योंकि Fragment केवल एक ही ListView ड्राइविंग के पीछे तर्क से निपटने के लिए की जरूरत है Fragment दृष्टिकोण का उपयोग हो सकता है।

यह एक बहुत ही समान स्थिति है जिसे मैंने अभी सामना किया है। मैं ViewPager के भीतर विभिन्न लंबवत स्क्रॉलिंग फॉर्म (इनपुट इनपुट फ़ील्ड शामिल हैं) दिखा रहा हूं। मेरे मामले में मैं Fragment दृष्टिकोण के लिए गया हूं क्योंकि मेरे मामले में, यह संभव है कि ViewPager को वास्तव में कुछ पृष्ठों पर एक पूरी तरह से अलग तरह का दृश्य प्रदर्शित करने की आवश्यकता होगी। उदाहरण के लिए, पहले कुछ पृष्ठों पर, उपयोगकर्ता इनपुट फॉर्म प्रदर्शित किए जा सकते हैं। लेकिन अंतिम पृष्ठ पर, एक ग्राफ प्रदर्शित किया जाएगा। उस ग्राफ को चलाने के लिए तर्क का एक अलग अलग सेट आवश्यक है। उन इनपुट फॉर्मों को ड्राइव करने के लिए और एक ही Activity से एक ग्राफ थोड़ा गन्दा हो जाएगा, और मुझे शायद कई प्रतिनिधि वर्गों या किसी चीज़ में व्यावसायिक तर्क शामिल करने की आवश्यकता होगी। तो मेरे लिए, Fragment एस अंत में स्पष्ट पसंद थे। मेरे पास InputFormFragment और GraphFragment है, और उनमें से प्रत्येक में केवल View एस के लिए लागू तर्क है जो वे आपूर्ति करते हैं।

विचार करने की एक और बात यह है कि निकट भविष्य में आप भी अपने ViewPager में View का एक अलग प्रकार प्रदर्शित करना चाहेंगे। या, हो सकता है कि आप एक और यूआई लेआउट पूरी तरह से लेना चाहें, शायद वह 0 जो ViewPager का उपयोग नहीं करता है लेकिन उन्हें सभी तरफ से प्रदर्शित करता है (उदाहरण के लिए लैंडस्केप मोड में बड़े टैबलेट पर इस्तेमाल किया जाने वाला लेआउट)। Fragment एस के साथ, चीजें बहुत अधिक मॉड्यूलर हैं और आप कोड को तेज़ी से करने के लिए कारक बना सकते हैं। यदि दूसरी तरफ आपने एक Activity का उपयोग कर अपना उद्देश्य हासिल किया है जिसमें एक सरल PagerAdapter और ListView के लिए सभी तर्क शामिल हैं, तो आप भविष्य में View एस या विशेष टैबलेट लेआउट का समर्थन करने के लिए भविष्य में और अधिक काम ले सकते हैं ।

एक बात मैं कहना है एक ViewPager में अपने आप को FragmentPagerAdapter और FragmentStatePagerAdapter के माध्यम से कार्यान्वित होने है Fragment रों, चीज़ें थोड़ी अजीब अगर आप किसी भी विशेष आवश्यकताएं होती हैं प्राप्त कर सकते हैं; प्रबंधन Fragment एस कभी-कभी मुश्किल हो सकता है। उदाहरण के लिए, मेरे यूआई के लिए मुझे ViewPager को Fragment एस युक्त प्रोग्रामेटिक रूप से जोड़ने और निकालने में सक्षम होना आवश्यक था। मैं भी सुनिश्चित करना है कि प्रयोग में अनुकूलक Fragment रों एक बार वे दिखाया गया था नष्ट नहीं किया था की जरूरत है क्योंकि मैं सभी Fragment रों एक साथ एक निश्चित बिंदु पर से डेटा एकत्र करने की जरूरत है। इसके अलावा, मैं विस्तार करने और यह सुनिश्चित करें कि Fragment रों ठीक से उनके onDestroy() के माध्यम से जाने के लिए और FragmentManager से हटा दिया जाता है जब ViewPager हटा दिया गया था बनाने के लिए FragmentPagerAdatper को संशोधित करने के लिए किया था।

Fragment एस विभिन्न स्क्रीन आकारों और उन्मुखताओं के लिए यूआई बनाने का एक बहुत ही मॉड्यूलर तरीका सक्षम करता है, और यह उत्कृष्ट है कि वे आपको व्यक्तिगत यूआई तत्वों के लिए व्यावसायिक तर्क और जीवनशैली को कैसे समाहित करने की अनुमति देते हैं। लेकिन अगर आपके परिदृश्य वास्तव में बस के रूप में एक ViewPager में कई ListView रों के रूप में सरल है और आप जानते हैं कि आप प्रतिरूपकता की जरूरत कभी नहीं होगा, तो Fragment रों की भूमि के ऊपर एक overkill हो सकता है।

+0

टुकड़े से जानकारी इकट्ठा करने के बारे में, नहीं यह एक इंटरफेस बनाने के लिए आसान होगा, टुकड़ा एक वस्तु है कि यह लागू करता है और उस वस्तु में जानकारी स्टोर करने के लिए इंटरफ़ेस कार्यों का उपयोग करने के लिए एक संदर्भ की मेजबानी की है? –

+0

अगर मैं सही समझते हैं, मुझे लगता है कि तुम क्या सुझाव दे रहे हैं कि चतुर बातें सुनिश्चित करने के लिए टुकड़े ViewPager में चारों ओर रहने (और लगातार मौत हो नहीं कर रहे हैं और उसके बाद फिर बनाया) नहीं करना पड़ता के बजाय, मैं बजाय एक तंत्र होना चाहिए अपने राज्य को जारी रखने के लिए। मैं यह कर सकता था और मैं सहमत हूं कि एक बेहतर दृष्टिकोण होगा, लेकिन मेरे विशेष आवेदन में टुकड़े निर्माण के लिए काफी महंगा हैं। कोडिंग और प्रदर्शन कारणों दोनों के लिए, यह सुनिश्चित करना अधिक सरल था कि सभी टुकड़े आसपास रहें, और फिर अनुरोध करें कि वे सभी एक साथ अपना डेटा जमा करें। – Trevor