2012-11-26 12 views
7

सबसे पहले, मैं FragmentStatePagerAdapter का उपयोग कर रहा हूं ताकि दृश्यों को प्रदर्शित करने के लिए एक ViewPager फ़ीड किया जा सके।जब सेटएडाप्टर कहा जाता है, तो ViewPager हमेशा रीफ्रेश नहीं होता है, FragmentStatePagerAdapter

जब ऐप चल रहे राज्य में होता है (यानी onResume() के बाद), ViewPager पर setAdapter को कॉल करना हमेशा काम करेगा और मेरा व्यूपायर रीफ्रेश करेगा, एडाप्टर में getItem(int position) विधि कहा जाता है।

हालांकि अभिविन्यास परिवर्तन के बाद, यदि मैं onCreate(Bundle savedInstance) में मेरी गतिविधि की विधि सेट सेट एडाप्टर को कॉल करता हूं, तो getItem(int position) विधि को कॉल नहीं किया जाता है, और पुराना खंड पुन: उपयोग किया जाता है।

मुझे लगता है कि शायद FragmentManager ऐसा कुछ कर रहा है जिसे मैं समझ नहीं पा रहा हूं? फ्रैगमेंट मैनेजर एकमात्र चीज है जो अभिविन्यास परिवर्तन के दौरान नष्ट नहीं होती है।

धन्यवाद

+0

समस्या सहेजे गए स्टेटस है। मुझे एक ही समस्या है लेकिन कोई समाधान नहीं है। आप निम्न कोशिश कर सकते हैं: befor आप एडाप्टर कॉल एडाप्टर सेट करें।saveState, एडाप्टर सेट करने और सहेजे गए राज्य के साथ पुनर्स्थापित सहेजे गए स्टेटस को सेट करें। मेरे मामले में यह मदद नहीं की, लेकिन शायद आपके लिए। कारण: ViewPager setAdapter में यह वर्तमान स्थिति को सहेजा गया और इसका पुन: उपयोग किया। (मुझे लगता है) – Informatic0re

+1

सही उत्तर यहां प्राप्त करें: http://stackoverflow.com/questions/13910826/viewpager-fragmentstatepageradapter-orientation-change – Informatic0re

+0

क्या इससे स्मृति रिसाव हो जाती है? कई कहते हैं कि यह करता है। कोई अन्य समाधान इस परिदृश्य को कैसे संभालना है? – pradyumnad

उत्तर

21

क्योंकि आप getFragmentManager() उपयोग कर रहे हैं FragmentStatePagerAdapter का दृष्टांत को नेस्टेड टुकड़े का उपयोग करते समय यह हो सकता है।

कोशिश getChildFragmentManager() बजाय का उपयोग कर:

CustomFragmentPagerAdapter fragmentPagerAdapter = new CustomFragmentPagerAdapter(getChildFragmentManager()); 

उत्तर here मिला था।

+0

मेरे लिए काम किया .... – Ganesh

+0

यह बहुत उपयोगी जानकारी थी! –

+0

धन्यवाद मेरे समय बचाओ ..! –

1

वैसे यह वह चीज है जिसे मैंने पाया (यह बहुत ही अजीब है)।

आप करने की जरूरत है PagerAdapter में आइटम ताज़ा आप सबसे निश्चित रूप से इतना PageAdapter के नए उदाहरणों बनाते समय आप एक ही FragmentManager पारित कर सकते हैं और उन्हें ViewPager की setAdapter कॉल करने के लिए गुजर रहा है, जैसे करने के लिए असफल हो जायेगी:

FragmentManager fm = getChildFragmentManager(); 
mViewPager.setAdapter(new MyPagerAdapter(fm)); 

या

FragmentManager fm = getActivity().getSupportFragmentManager(); 
mViewPager.setAdapter(new MyPagerAdapter(fm)); 

लेकिन अगर आप लगातार स्विच करेंगे FragmentManager रों आप आरं हैं जब tialising PagerAdapter तो यह काम करेगा।

देखने की मेरी बात से यह भयानक है ... किसी को भी कैसे ठीक (और इस गंदे तरीके से नहीं) ViewPager में आइटम को ताज़ा करने के विचारों है, तो दूसरों :)

0

मैं FragmentPagerAdapter का उपयोग के साथ अपने विचारों को साझा और mViewPager.setAdapter() काम नहीं कर रहा है। मैं इसे नीचे दिए गए चरण में ठीक करता हूं:
(1) वर्तमान फ्रैगमेंट सूची प्राप्त करें।

List<Fragment> fragmentList = getSupportFragmentManager().getFragments(); 
List<Fragment> fragmentListCopy = new ArrayList<Fragment>(fragmentList); 

(2) को हटाने टुकड़ा mamually

//I have two fragment 
getSupportFragmentManager().beginTransaction().remove(fragmentList.get(0)).commit(); 
getSupportFragmentManager().beginTransaction().remove(fragmentList.get(1)).commit(); 

(3) ViewPager

mViewPager.setAdapter(...) 

करने के लिए नए FragmentPagerAdapter सेट इससे पहले कि आप नई एडाप्टर सेट बस टुकड़े को हटा दें।

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