2012-03-07 18 views
5

के टैग को नहीं बदला जा सकता है मेरे पास एक दृश्य पेजर में कुछ पेज (टुकड़े) हैं।
जब मैं (उदाहरण के लिए) पहले एक दूर करने के लिए, इस तरह की कोशिश की:खंड

mFragmentManager.beginTransaction().remove(Page1).commit(); 

इसे कहते हैं

IllegalStateException has occured. 

है कि मैं पता नहीं क्यों। क्या कोई मेरी मदद कर सकता है? धन्यवाद।

अपवाद:

java.lang.IllegalStateException: Can't change tag of fragment Page2{40586418 #2 id=0x7f080006 android:switcher:2131230726:2}: was android:switcher:2131230726:2 now android:switcher:2131230726:1 
+0

संभव डुप्लिकेट [एंड्रॉइड: एक टुकड़े को दूसरे के साथ प्रतिस्थापित नहीं कर सकता] [http://stackoverflow.com/questions/5907673/android-cant-replace-one-fragment-with-another) – bernie

+0

अपवाद ट्रेस मदद करेगा । वही बात मेरे साथ हो रही है - हालांकि, ViewPager.setCurrentItem (int) पर, हटाए जाने पर नहीं। –

+0

आप ViewPager से निकालें टुकड़ा से क्या मतलब है। ViewPager टुकड़ा के जीवन का प्रबंधन करता है।एडाप्टर के तरीकों का उपयोग करके, आपको सामानों को हटाना होगा जैसे आप सूचीदृश्य में हटा देंगे। क्या आप स्पष्ट कर सकते हैं? –

उत्तर

2

यह एक पुरानी सवाल है, लेकिन किसी भी तरह यहाँ आशा है कि यह किसी में मदद मिलेगी में कुछ जानकारी है।

व्यूपागर अपने एडाप्टर के साथ मिलकर काम करता है जो इसे ViewPager # setAdapter() के माध्यम से सेट किया गया है। इस प्रश्न के मामले में, ऐसा लगता है कि FragmentPagerAdapter को एडाप्टर के रूप में उपयोग किया जाता है (चूंकि इस एडाप्टर में टुकड़े एंड्रॉइड नाम हैं: स्विचर: [x]: [y] अपवाद में प्रकट होता है)। FragmentPagerAdapter के बारे में

एक महत्वपूर्ण अवलोकन यह है:

FragmentPagerAdapter आवंटित टुकड़े कि ViewPager में किया जाता है का मालिक है।

public abstract Fragment getItem(int position); 

इस समारोह पृष्ठों के रूप में ViewPager द्वारा इस्तेमाल किया विभिन्न टुकड़े बनाता है:

ViewPagerAdapter के संयोजन के रूप के साथ ViewPager के उपयोगकर्ता, नमूने के रूप में निम्न प्रकार FragmentPagerAdapter GetItem() विधि को लागू करने का एक उपवर्ग परिभाषित करने के लिए है । इस विधि के कार्यान्वयन को खंडों को आवंटित करने के लिए उपखंड द्वारा FragmentPagerAdapter() को प्रदान की जाने वाली सेवा के रूप में देखा जाना चाहिए।

दूसरे शब्दों में, हालांकि सबक्लास खंडों को आवंटित करता है, यह उनके मालिक नहीं है।

चूंकि ऊपर बताया गया है कि, टुकड़ों का मालिक FragmentPagerAdapter है, सभी खंड संचालन (FragmentManager/FragmentTransaction के अर्थ में) केवल FragmentPagerAdapter द्वारा किया जाना चाहिए।

इन टुकड़ों पर संचालन करने की कोशिश करने से ViewPager के सामान्य संचालन में हस्तक्षेप हो सकता है और अपरिभाषित व्यवहार हो सकता है।

इस प्रश्न के मामले में, FragmentPagerAdapter के बाहर ViewPager द्वारा उपयोग किए गए टुकड़ों में से एक को हटाने का प्रयास है, जैसा कि समझाया गया है और शायद इस अनुक्रम के साथ समाप्त होने वाला अनुक्रम ट्रिगर किया गया है।

जब यह गतिशील रूप से एक ViewPager में दूर करने के लिए/जोड़/बदलने के पृष्ठों जिस तरह से यह करने के लिए एडाप्टर पर notifyDataSetChanged() कॉल करने के लिए की जरूरत है।

शुभकामनाएं!