2011-12-01 20 views
101

मेरे पास एक FragmentPagerAdapter पर एक व्यूपेगर लगा हुआ है जो तीन टुकड़े प्रदर्शित कर रहा है। ViewPager एक होस्टेड टुकड़े के दृश्य को नष्ट करने के लिए प्रतीत होता है जब यह वर्तमान स्थिति से एक से अधिक स्वाइप दूर होता है।व्यूपेजर को ऑफ-स्क्रीन दृश्यों को नष्ट करने से रोकें

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

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

क्या इस व्यवहार को रोकने के लिए ViewPager को मनाने के लिए कोई तरीका है और बस मेरे सभी टुकड़े स्मृति में रखें?

उत्तर

277

सहायता पैकेज, एक विधि ViewPager को जोड़ा गया है जो बल्कि डिफ़ॉल्ट जो है 1.

आपके मामले में की तुलना में, आप गुप्त पृष्ठों की संख्या का उपयोग करने के निर्दिष्ट कर सकते हैं की revision 4 में, आप निर्दिष्ट करना चाहते हैं 2, ताकि जब आप तीसरे पृष्ठ पर हों, तो पहला व्यक्ति नष्ट नहीं होता है, और इसके विपरीत।

mViewPager = (ViewPager)findViewById(R.id.pager); 
mViewPager.setOffscreenPageLimit(2); 
+0

किसी भी विचार को कवरफ्लो पर कैसे करना है? – josephus

+4

हैलो। जिस पर मैं काम कर रहा हूं, टुकड़े/पृष्ठ गतिशील रूप से बनाए जाते हैं इसलिए संभावित टुकड़ों की अनिश्चित संख्या होती है। यह मामला, यह आमतौर पर 10 या उससे कम तक जाता है। क्या इस समाधान का उपयोग उन पृष्ठों पर करने के लिए स्मृति का खराब उपयोग नहीं होगा? टुकड़े केवल वैसे ही दृश्य को पकड़ेंगे। धन्यवाद! – mahkie

+0

यह विधि फेंकता है: "java.lang.IllegalStateException: खंडन पहले ही जोड़ा गया है:" मेरे ऐप के लिए त्रुटि। – alicanbatur

3

"पृष्ठ जो एक निष्क्रिय अवस्था में देखने के पदानुक्रम में वर्तमान पृष्ठ के दोनों ओर बनाए रखा जाना चाहिए की संख्या सेट करें। इस सीमा से परे पेज एडाप्टर से जब जरूरत से निर्मित किया जाएगा।" जब आप पृष्ठ स्वाइप

http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit(int)

2

डिफ़ॉल्ट रूप से, ViewPager टुकड़े का पुनर्निर्माण करने वाला। इसे रोकने के लिए, आप दो चीजों में से एक कोशिश कर सकते हैं:

1. onCreate में() अपने टुकड़े की, फोन setRetainInstance (सही)।

2. टुकड़े की संख्या अपने onCreate में & अपेक्षाकृत छोटे, तय हो गई है, तो() निम्न कोड जोड़ें: अगर मैं सही ढंग से याद

ViewPager mViewPager = (ViewPager) findViewById(R.id.pager); 
mViewPager.setOffscreenPageLimit(3); 

, दूसरा विकल्प अधिक आशाजनक है। लेकिन मैं आपसे आग्रह करता हूं कि आप दोनों को आजमाएं और देखें कि उनमें से कौन सा काम करता है।

+1

दूसरा मेरे लिए काम कर रहा है। –

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