2012-01-25 12 views
9

मेरे पास एक व्यूफ्लिपर के साथ एक गतिविधि है जो मेरे डेटा के साथ विचारों (पृष्ठों) के समूह के बीच फ़्लिप करती है।व्यूफ्लिपर बनाम टुकड़े

मैं अपने विचारों के बीच स्विच करने के लिए खंड API का उपयोग करने पर विचार कर रहा हूं। ऐसा करने के क्या फायदे हैं?

क्या मैं खंडों का उपयोग करके प्रदर्शन लाभ देख सकता हूं क्योंकि व्यूफ्लिपर अनिवार्य रूप से दृश्यता झंडे को टॉगल करता है और टुकड़े वास्तव में दृश्य पदानुक्रम को प्रतिस्थापित करते हैं जैसे आप उन्हें जोड़ते/हटाते हैं?

क्या कोई हमें इस पर अधिक अंतर्दृष्टि दे सकता है?

धन्यवाद!

+2

यदि आप एक प्रदर्शन विश्लेषण चाहते हैं तो आपको इसे स्वयं करना चाहिए। स्टैक आमतौर पर इस तरह के प्रश्न का उत्तर देने में अच्छा नहीं होता है। – Warpzit

उत्तर

14

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

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

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

3

संपादित करें: मैं व्यूफैपर के बारे में यहां ViewPager के बारे में बात कर रहा हूं।

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

public static class DashboardPagerAdapter extends FragmentPagerAdapter { 

    private static final int NUM_ITEMS_PER_SCREEN = 12; 

    private List<View> mAllItems; 
    private int mNumScreens; 

    public DashboardPagerAdapter(FragmentManager fm, List<View> allItems) { 
     super(fm); 
     mAllItems = allItems; 
     mNumScreens = (int) Math.ceil(mAllItems.size() 
       /(float) NUM_ITEMS_PER_SCREEN); 
     Log.d(TAG, "num screens: " + mNumScreens); 
    } 

    @Override 
    public int getCount() { 
     return mNumScreens; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     DashboardScreenFragment screen = DashboardScreenFragment 
       .newInstance(); 

     for (int i = position * NUM_ITEMS_PER_SCREEN; i < (position + 1) 
       * NUM_ITEMS_PER_SCREEN; i++) { 
      if (i >= mAllItems.size()) { 
       break; 
      } 
      screen.addChild(mAllItems.get(i)); 
     } 
     return screen; 
    } 
} 

और उसे सेट अप सुपर सरल है:

final DashboardPagerAdapter adapter = new DashboardPagerAdapter(
      getFragmentManager(), mAllButtons); 

क्या @ sebap123 कहा, तुम Android v4 के साथ और समर्थन लाइब्रेरी के साथ ऊपर टुकड़े का उपयोग कर सकते के विपरीत; विवरण के लिए http://developer.android.com/sdk/compatibility-library.html देखें, लेकिन वास्तव में इसमें जार फ़ाइल को आपकी/libs निर्देशिका में डालना शामिल है।

बीटीडब्ल्यू, ध्यान दें कि व्यूपेजर के साथ, प्रत्येक "पृष्ठ" स्वयं एक टुकड़ा है।

चाहे प्रदर्शन में सुधार हो या नहीं, यह इस बात पर निर्भर करता है कि आप इसकी तुलना किस प्रकार कर रहे हैं। मैं अत्यधिक प्रदर्शन समस्याओं के बारे में चिंता करने के बाद ViewPager को आजमाने की सलाह देता हूं। जैसा कि डोनाल्ड Knuth ने कहा, "हमें कम क्षमता के बारे में भूल जाना चाहिए, समय के बारे में 97% कहते हैं: समयपूर्व अनुकूलन सभी बुराई की जड़ है।"

किसी भी मामले में, यदि आपके पास बड़ी संख्या में पृष्ठ हैं, तो अधिक उपयुक्त एडाप्टर के लिए http://developer.android.com/reference/android/support/v4/app/FragmentStatePagerAdapter.html देखें।

+1

मैं खंडों के बीच फ़्लिप करने के लिए व्यूफ्लिपर का उपयोग करने के बारे में बात कर रहा हूं। मैं FragmentManager का उपयोग करके एक व्यूफ्लिपर का उपयोग कर बनाम टुकड़े जोड़ने/निकालने के बीच तुलना का जिक्र कर रहा हूं जो सिर्फ दृश्यों के माध्यम से फ़्लिप करता है (फिर खंड नहीं!) – dnkoutso

+0

अंतर दृश्यों में है। यदि आप चाहते हैं कि उपयोगकर्ता स्क्रीन के बीच क्षैतिज रूप से स्वाइप करने में सक्षम हो, तो आपको ViewFlipper का उपयोग करना चाहिए। यदि आप बस टुकड़े जोड़ना और निकालना चाहते हैं (उदा। बटन के साथ), तो आपको एक FragmentManager का उपयोग करना चाहिए। –

+1

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

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