पोर्ट्रेट मोड में, मेरे ViewPager
में 3 खंड ए, बी, सी हैं लेकिन लैंडस्केप मोड में, इसमें केवल 2 खंड ए और सी हैं इसलिए मैं प्रत्येक मोड के लिए 2 FragmentStatePagerAdapter
एस बनाता हूं। समस्या तब होती है जब स्क्रीन अभिविन्यास बदल जाता है, ViewPager
पुराने अभिविन्यास के पिछले खंडों को पुनर्स्थापित करता है और उपयोग करता है। उदाहरण के लिए, जब पोर्ट्रेट से लैंडस्केप में अभिविन्यास बदलते हैं, तो ViewPager
अब ए और सी के बजाय 2 खंड ए, बी दिखाता है। मुझे पता है कि ऐसा क्यों होता है लेकिन इसके लिए कोई अच्छा समाधान नहीं मिल रहा है।पोर्ट्रेट और लैंडस्केप के लिए विभिन्न एडाप्टर के साथ ViewPager
मेरा वर्तमान कामकाज ViewPager
के लिए अलग-अलग आईडी का उपयोग करना है (उदाहरण के लिए: चित्रों के लिए id/viewpager_portrait और लैंडस्केप लेआउट के लिए id/viewpager_landscape) लेकिन इससे मुझे स्मृति रिसाव का कारण बनता है क्योंकि पुराने टुकड़े को नष्ट नहीं किया जाएगा और अभी भी स्मृति में रखा जाना चाहिए।
मैं गतिविधि के onCreate
में कॉल super.onCreate (शून्य) जैसे कुछ वैकल्पिक हल की कोशिश की है, या गतिविधि के onSaveInstanceState
में ViewPager
के टुकड़े को दूर लेकिन वे सभी मेरे ऐप दुर्घटना बनाता है।
तो मेरा सवाल यह है कि FragmentStatePagerAdapter
में अभिविन्यास बदलते समय एक या कई टुकड़ों का पुन: उपयोग करने से कैसे बचें?
किसी भी मदद की सराहना की जाएगी। अग्रिम धन्यवाद।
क्या आपने 'SaveInstanceState' को ओवरराइड करने का प्रयास किया था और उस विधि में 'super.onSaveInstanceState' को कॉल करने से बचें। यह 'फ्रैगमेंट' को सहेजने से रोक देगा। –
यह मेरा वर्तमान कामकाज है, लेकिन इसके बजाय super.onSaveInstanceState को कॉल करने से बचें, मैं ViewPager द्वारा किए गए सभी राज्य को साफ़ करता हूं। और मुझे यह सबसे अच्छा समाधान नहीं लगता है इसलिए मैं अभी भी पूछता हूं क्योंकि कभी-कभी व्यूपेजर के अंदर से एक दुर्घटना दिखाई देती है। – Wayne