2012-11-07 23 views
18

मैं एक FragmentPagerAdapter के साथ एक ViewPager है, और मेरे एप्लिकेशन पहले से मुद्दों के बिना सिर्फ दो टुकड़े (विभिन्न प्रकार) का इस्तेमाल किया गया है।मैं अपने टुकड़ों को नष्ट करने के लिए अपने कस्टम FragmentPagerAdapter कैसे कहूं?

मैं बस, एक तिहाई टुकड़ा जोड़ा हालांकि, और अब मेरी अनुकूलक/viewpager जब मैं अब तक उन लोगों से दूर होने मेरी टुकड़े को नष्ट करने जा रहा है। उदाहरण के लिए, यदि मैं पेज 1 पर हूं, तो पृष्ठ 3 नष्ट हो जाता है और जब मैं इसके करीब आता हूं तो उसे फिर से बनाया जाता है। अगर मैं पेज 3 पर हूँ, एक ही यह मेरे एप्लिकेशन में मुद्दों के बहुत सारे कारण है पृष्ठ 1.

होता है। टुकड़े बहुत रैम-भारी नहीं हैं, तो मैं इसे कैसे होने से रोक सकता हूं?

+0

यह टुकड़ा नष्ट करने या दृश्य को नष्ट करने है? – DeeV

+0

मुझे यकीन नहीं है। मैं कैसे जांचूँगा? –

+1

आपने अभी कहा है "यह बहुत सारे मुद्दों का कारण बन रहा है।" अगर टुकड़ा नष्ट हो रहा है, तो यह स्थिति स्मृति से मिटा दी जा रही है और पुनः लोड होने पर डिफ़ॉल्ट पर रीसेट कर दिया जा रहा है। – DeeV

उत्तर

43

मेरा मानना ​​है कि आप ViewPager.setOffscreenPageLimit() के लिए देख रहे हैं।

आपके मामले में, स्मृति में अपने टुकड़े रखना चाहिए और उन्हें नष्ट नहीं निम्नलिखित।

ViewPager pager = (ViewPager) findViewById(R.id.viewPager); 
pager.setOffscreenPageLimit(2); 

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

+0

बिल्कुल सही! यह मेरा अस्थायी समाधान होने जा रहा है जब तक कि मैं अपने टुकड़े अधिक नेटवर्क-स्वतंत्र नहीं बना देता। –

+0

इससे मुझे बहुत मदद मिली! धन्यवाद! – JozeRi

+1

ऑनसेवस्टेंसस्टेट() को अधिकांश बार नहीं कहा जाता है। उदाहरण के लिए, आप पेज 1 पर हैं, पृष्ठ 5 पर जाएं: पहला खंड DestroyView() पर जाता है, उदाहरण के लिए, लेकिन SaveInstanceState() पर नहीं। कम से कम मेरे मामले में। – natario

4

सिर्फ FragmentpagerAdapter

@Override 
public void destroyItem(ViewGroup container, int position, Object object) { 
     // TODO Auto-generated method stub 
     super.destroyItem(ViewGroup container, int position, Object object); 
} 

में इस विधि को ओवरराइड अपने कोड से हटाने super.destroyItem(ViewGroup container, int position, Object object);

+0

यह तब तक काम करेगा जब तक आप _never_ को अपना टुकड़ा नष्ट नहीं करना चाहते हैं (भले ही FragmentPagerAdapter गुंजाइश से बाहर हो)। यह समस्याग्रस्त हो सकता है, लेकिन कुछ स्थितियों में यह सही है। उन समस्याओं की स्थितियों के लिए, आप हमेशा 'नष्टItem (..)' को अपने आप पर कॉल कर सकते हैं। –

+0

इस समाधान के लिए आपको बहुत बहुत धन्यवाद :) –

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

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