2012-12-06 33 views
11

चूंकि मैंने समर्थन lib rev का उपयोग करने के लिए अपनी ऐप को अपग्रेड किया है। 11 और एसडीके 4.2 के खिलाफ संकलित मैं निम्न त्रुटि प्राप्तटुकड़ा पहले से ही जोड़ा गया है। समर्थन lib

java.lang.IllegalStateException: Fragment already added: i{4079e598 #2 id=0x1020002 i} 
    at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1159) 
    at android.support.v4.app.BackStackRecord.popFromBackStack(BackStackRecord.java:729) 
    at android.support.v4.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1493) 
    at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:477) 
    at android.support.v4.app.FragmentActivity.onBackPressed(FragmentActivity.java:174) 

मैं stackoverflow पर इसी तरह की समस्याओं के बारे में पढ़ा है। उनमें से कुछ प्रतिस्थापन विधि से बचने का सुझाव देते हैं, जिसका मैं उपयोग नहीं कर रहा हूं। लेन-देन है कि रोलबैक पर दुर्घटना का कारण बनता है इस तरह दिखता है:

ft.remove(oldFrag).add(newFrag).addToBackStack(null).commit() 

अन्य टिप्पणियां यदि आप टुकड़ा संक्रमण कि पर्याप्त त्वरित पूर्ण नहीं कर सकता से पहले उपयोगकर्ता फिर से वापस प्रेस का उपयोग कर रहे इस हो सकता है का कहना है। चूंकि मैं दिए गए टुकड़ों पर संक्रमण एनिमेशन का उपयोग करता हूं, यह कारण हो सकता है। हालांकि, संक्रमण को हटाने का विकल्प नहीं है और चूंकि यह विशेष रूप से 2.3.x चल रहे फ़ोन पर होता है और बग को 11 और एसडीके 4.2 में अपग्रेड करके पेश किया गया था। मुझे उम्मीद है कि Google इसे अगले रिलीज के साथ ठीक करेगा।

क्या किसी को भी ऐसी ही समस्याएं हैं, क्या यह 4.2.1 में तय करने की योजना है या समर्थन आर 12, या सुझाव है कि मैं त्रुटि को रोकने के लिए क्या कर सकता हूं?

+0

वही चीज़ प्राप्त करना, लेकिन 'डायलॉग फ्रैगमेंट' के साथ। –

+0

मैं इसे कभी-कभी डायलॉग फ्रैगमेंट के साथ भी प्राप्त करता हूं ... मैंने एक रिपोर्ट दायर की है [यहां] (http://code.google.com/p/android/issues/detail?id=41552&thanks=41552&ts=1355757013)। लेकिन अभी तक कोई जवाब नहीं है। – phlebas

+0

समर्थन लाइब्रेरी आर 12 के लिए एक ही त्रुटि मिली। एंड्रॉइड इश्यू ट्रैकर को भी ट्रेस पोस्ट किया गया। – Sash0k

उत्तर

6

मैं एक संकेत मैंने पाया here

तो मैं executePendingTransactions() जोड़ा तुरंत लेनदेन निष्पादित करने के लिए उपयोग करते हुए इस मुद्दे को ठीक करने के लिए कोशिश कर रहा हूँ:

ft.remove(oldFrag).add(newFrag).addToBackStack(null).commit() 
getFragmentManager().executePendingTransactions(); 

यह सुनिश्चित करना चाहिए कि backstack एक साफ राज्य में हमेशा होता है मुझे आशा है कि मेरे पास कोई नकारात्मक कमी नहीं है जिसके बारे में मैं सोच सकता हूं।

अद्यतन हालांकि यह नियमित रूप से फोन पर काम करता है, इस मुद्दे को कुछ सामान्य उपकरणों कि एक ज्ञात Android संस्करण संख्या नहीं है, 4.0.1 या इसी तरह की तरह पर रहता है, लेकिन इसके बजाय गुरु मार्च 02 जैसे 'कुछ दिनांक रिपोर्ट 2006 00:00:00 जीएमटी +0100 (एमईजेड) 'एंड्रॉइड वर्जन नंबर के रूप में, उदाहरण के लिए: सैमसंग - एस्प्रेसोविफिक्स - जीटी-पी 3110 एंड्रॉइड संस्करण के रूप में दी गई तारीख की रिपोर्ट करता है और टुकड़ा जोड़ा अपवाद उत्पन्न करता है ... अभी भी परेशान है। उपयोगकर्ताओं को इस सामान की परवाह नहीं है, इसलिए यह हमेशा पहले से ही कमजोर डेवलपर है जिसे दोषी ठहराया जाता है। पाठ्यक्रम की अरब डॉलर कंपनियों के लिए कोई समस्या नहीं है, लेकिन एकल डेवलपर्स, बस लिखने वाले ऐप्स की तुलना में अपने समय के साथ कुछ और उपयोगी करते हैं;)

+0

मुझे वही दुर्घटना हो रही है और मैं ऊपर की रेखा का उपयोग नहीं कर रहा हूं। मैं सिर्फ ft.add (newFrag) जोड़ता हूं .addToBackStack (null) .commit() इस तरह। – tasomaniac

+0

@phlebas क्या आप सुझाव दे सकते हैं कि मुझे SUPport लाइब्रेरी में FragmentManager.java क्लास संपादित करना चाहिए – Adi

+0

कृपया अपना कोड कृपया बताएं। –

5

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

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

+5

वास्तव में दुखी है कि हमें ऐसा करने की आवश्यकता है। अगर एक टुकड़ा जोड़ा गया है तो निश्चित रूप से बताने के लिए वास्तव में कोई तरीका नहीं है? –

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

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