2011-10-26 21 views
5

में गतिशील रूप से टुकड़े जोड़ना और निकालना मैं ViewPager का उपयोग PagerFragmentAdapter के साथ कर रहा हूं जो टुकड़े प्रदान करने के लिए आंतरिक सूची का उपयोग करता है। मैं सेटिंग में बदलावों पर गतिशील रूप से टुकड़े जोड़ना और निकालना चाहता हूं।ViewPager

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.fragment_pager); 
    mAdapter = new ServicePagerAdapter(getSupportFragmentManager()); 
    mPager = (ViewPager) findViewById(R.id.pager); 
    mPager.setAdapter(mAdapter); 
} 

मैं फिर से setAdapter कॉल करने की कोशिश की है, लेकिन मैं एक IllegalStateException (Can not perform this action after onSaveInstanceState) प्राप्त करते हैं।

मेरा उद्देश्य कैसे प्राप्त कर सकता है?

उत्तर

2

आपको हर बार अपना ServicePagerAdapter रीसेट करने की आवश्यकता नहीं है। अपने Activity (या onActivityCreated() में Fragment की विधि) में onCreate() विधि में इसे बनाने और सेट करने के लिए पर्याप्त है और फिर आप इसमें नए तत्व जोड़ने के लिए अपने एडाप्टर की add() विधि को कॉल कर सकते हैं। लेकिन एडाप्टर के प्रत्येक जोड़े के बाद notifyDataSetChanged() पर कॉल करना न भूलें।

+0

दुर्भाग्य से यह इतना आसान नहीं है। FragmentPagerAdapter कैश Fragments, आपको एक कस्टम पेजर एडाप्टर बनाना है या कुछ चाल का उपयोग करना है। – Matroska

+0

आपके कोड नमूने में आप 'ServicePagerAdapter' का उल्लेख करते हैं - यह लाइब्रेरी क्लास नहीं है, इसलिए मैंने माना है कि आप पहले से ही कस्टम एडाप्टर का उपयोग कर रहे हैं। तो हाँ, आपको 'पेजर एडाप्टर' वर्ग के कस्टम कार्यान्वयन की आवश्यकता है। आपके मुख्य प्रश्न के बारे में - मुझे लगता है कि इसका उत्तर दिया गया था। – HitOdessit

+2

यदि तत्व हटा दिए गए हैं तो पेजरएडाप्टर पर NotataDataSetChanged() को कॉल करने के लिए पर्याप्त नहीं है। आपको पेजर एडाप्टर की getItemPosition विधि को ओवरराइड करने की आवश्यकता है। यदि तत्व अभी भी है, तो POSITION_UNCHANGED वापस लौटें, या POSITION_NONE को हटा दिया गया है। –