11

पर इस क्रिया को निष्पादित नहीं कर सकता है मेरे पास 3 एपमेंट्स के साथ मेरे ऐप में एक गतिविधि है। जब पहली बार बटन दबाया जाता है, तो गतिविधि में एक विधि कहा जाता है जो कुछ अप्रासंगिक सामान करता है और फिर finish() पर कॉल करता है।एंड्रॉइड - IllegalStateException के कारण खत्म होने के बाद गतिविधि को नष्ट करने में असमर्थ: SaveInstanceState

यह onPause() खंड पर ट्रिगर करता है, जो अधिक अप्रासंगिक सामग्री करता है और फिर super.onPause() पर कॉल करता है।

एप्लिकेशन तो पुराने गतिविधि उस पर (तार्किक दृश्य ढेर के बाद) आया लोड करता है, और अचानक निम्न अपवाद जब onDestroyView() टुकड़ा पर कहा जाता है के साथ दुर्घटनाओं:

FATAL EXCEPTION: main 
java.lang.RuntimeException: Unable to destroy activity {be.niteowl.niteowl.debug/be.niteowl.niteowl.views.activities.VenueActivity}: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2793) 
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:2811) 
at android.app.ActivityThread.access$2100(ActivityThread.java:123) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:972) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:130) 
at android.app.ActivityThread.main(ActivityThread.java:3835) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1327) 
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1338) 
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595) 
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574) 
at be.niteowl.niteowl.views.activities.TrackFragment.onDestroyView(TrackFragment.java:161) 
at android.support.v4.app.Fragment.performDestroyView(Fragment.java:1665) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:980) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1070) 
at android.support.v4.app.FragmentManagerImpl.dispatchDestroy(FragmentManager.java:1898) 
at android.support.v4.app.FragmentActivity.onDestroy(FragmentActivity.java:324) 
at com.actionbarsherlock.app.SherlockFragmentActivity.onDestroy(SherlockFragmentActivity.java:88) 
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2780) 
... 11 more 

त्रुटि हो गया लगता है मुख्य टुकड़े से MapFragment को हटाने का प्रयास कर रहा है। मुझे पता है कि आपको टुकड़ों के टुकड़े नहीं हैं, लेकिन कोड अतीत में काम करता था और वैसे भी इसके आसपास कोई रास्ता नहीं है।

@Override 
public void onDestroyView() { 
    SupportMapFragment f = (SupportMapFragment) activity.getSupportFragmentManager().findFragmentById(R.id.fragment_map); 
    if (f != null) { 
     activity.getSupportFragmentManager().beginTransaction().remove(f).commit(); 
    } 
    super.onDestroyView(); 
} 

मैं चारों ओर एक आकलन के लिए यहां पर पहले से ऐसा (सबसे विशेष रूप getting exception "IllegalStateException: Can not perform this action after onSaveInstanceState") देखा, लेकिन उनमें से कोई भी मेरे वर्तमान समस्या के लिए लागू किया गया।

+0

के लिए किया था कि आप वास्तव में savedinstancestate से पहले सुनिश्चित करें कि अपनी चल रहा है बनाया है? – Broak

उत्तर

7

चूंकि आपकी गतिविधि नष्ट हो रही है, इसलिए आपके टुकड़े स्वचालित रूप से नष्ट हो जाएंगे। इसलिए, उन्हें हटाने के लिए आपको कोई आवश्यकता नहीं है। बस अपनी onDestroyView() विधि हटाएं।

मुझे पता है कि आपको टुकड़ों के टुकड़े नहीं हैं, लेकिन कोड अतीत में काम करता था और वैसे भी इसके आसपास कोई रास्ता नहीं है।

सबसे पहले, टुकड़ों के टुकड़े टुकड़े के एंड्रॉइड सपोर्ट पैकेज के बैकपोर्ट और मूल एंड्रॉइड 4.2+ खंडों के कार्यान्वयन के माध्यम से समर्थित हैं।

दूसरा, आप टुकड़े के भीतर टुकड़े नहीं कर रहे हैं, कम से कम यहां दिखाए गए कोड के आधार पर नहीं। किसी कारण से, TrackFragment गतिविधि के लिए उस कार्य को प्रस्तुत करने के बजाय, एक और शीर्ष-स्तरीय खंड (आपका SupportMapFragment) प्रबंधित कर रहा है।

+0

धन्यवाद, यह वास्तव में कुछ हद तक ठीक था। हालांकि, अब मुझे तीसरे टैब पर जाने और फिर वापस जाने पर समस्याएं हैं: अंतिम अपवाद: मुख्य android.view।InflateException: बाइनरी एक्सएमएल फ़ाइल लाइन # 9 6: कक्षा खंड को एंड्रॉइड.view.LayoutInflater.createViewFromTag (लेआउटइनफ्लेटर.जावासाइट 87) ... (इस टिप्पणी के लिए बहुत लंबा) – Vindicator

+0

@ विंडिकेटर: शायद एक नया स्टैक ओवरफ्लो प्रश्न खोलें , जहां आप संपूर्ण स्टैक ट्रेस और प्रासंगिक एक्सएमएल और जावा कोड दिखा सकते हैं। – CommonsWare

+0

@ विन्डिकेटर यह समस्या को ठीक करने लगता है: http://stackoverflow.com/a/17422251/732489 – Quentin

15

निम्नलिखित कोड मेरे लिए काम किया। यह टुकड़ा है कि OnPostResume() कॉलबैक मेरे लिए समस्या का समाधान हो में नक्शा टुकड़ा

@Override 
public void onDestroy() { 

    SupportMapFragment f = (SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.mapView); 
    if (f.isResumed()){ 
     getFragmentManager().beginTransaction().remove(f).commit(); 
    } 

    super.onDestroy(); 
} 
+0

धन्यवाद आदमी, दुर्घटना तब थी जब मैं ऐप को बंद करने की कोशिश कर रहा था और आपका कोड इसे ठीक कर रहा था –

+2

f.isResumed() ने भी मेरे लिए काम किया, मैं बस f! = Null का उपयोग कर रहा था (जो मुझे लगता है कि आपके कोड में भी जोर से है), बहुत बहुत धन्यवाद! अंत में – Analizer

+0

! यह भी मेरे लिए किया था! – lisa

0

निम्नलिखित अपनी गतिविधि नष्ट हो जाता है जिसकी वजह से टुकड़े के रूप में नष्ट होने के लिए के लिए धन्यवाद, .commit() संभाला नहीं जा सकता।

getSupportFragmentManager() प्रारंभ करें ट्रांज़ेक्शन()। हटाएं()। प्रतिबद्ध()।

onBackPressed() में से निपटने की कोशिश करो, जो मैं अपने आवेदन

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