2012-08-05 18 views
5

मेरे पास DialogFragment है जो सरल होना चाहिए लेकिन यह मुझे जेली बीन पर विशेष रूप से कुछ बड़ी समस्याएं दे रहा है।DialogFragment क्रैश गतिविधि प्रारंभ करते समय गतिविधि सक्रियता()

ऐप नेटवर्क का उपयोग करता है और यह उपयोगकर्ता को वाईफाई चालू करने या रद्द करने के लिए एक संवाद पॉप करता है, फिर उसे बंद कर देता है। तो यह DialogFragment प्रदान करता है और दृश्य बनाता है के रूप में: उपयोगकर्ता हाँ क्लिक करता है

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 

    AlertDialog a = new AlertDialog.Builder(getActivity()).setCancelable(true).setTitle(R.string.dialog_title_disabled) 
      .setMessage(R.string.dialog_text) 
      .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 
         dismiss(); 
         Intent i = new Intent(Settings.ACTION_WIRELESS_SETTINGS); 
         i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
         startActivity(i); 
        } 
      }).setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 
         getActivity().finish(); 
        } 
      }).create(); 
    //a.setCanceledOnTouchOutside(false); 
    return a; 
} 

है, यह बातचीत को खारिज करते हुए और वायरलेस सेटिंग्स गतिविधि खोलता है। या यदि उपयोगकर्ता क्लिक रद्द करें यह सिर्फ मेरी पूरी गतिविधि बंद कर देता है, लेकिन Jelly Bean, कभी भी मैं हाँ, यह करता है सेटिंग को खोलने के लिए क्लिक करें पर, लेकिन एप्लिकेशन बल निम्न त्रुटि के साथ बंद कर देता है:

08-05 20:24:22.584: E/AndroidRuntime(2579): java.lang.IllegalStateException: Failure saving state: active SettingsDialogFragment{425dd550} has cleared index: -1 
08-05 20:24:22.584: E/AndroidRuntime(2579):  at android.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1653) 

कुछ अतिरिक्त लॉगिन करते है प्रत्येक खंड है कि मेरी लेआउट और नंबर 2 कि SettingsDialogFragment होना चाहिए था पर था की बचाया राज्य दिखा सिर्फ एक null है:

08-05 20:24:22.576: E/FragmentManager(2579):  #2: null 

मैं बातचीत को खारिज नहीं करने की कोशिश की, लेकिन यह एक ही तरह से दुर्घटनाग्रस्त हो गया।

मुझे सच में यकीन नहीं है कि यहां क्या हो रहा है ... कोई विचार?


संपादित करें:

अभ्यास कोड (यह एक सामान्य गतिविधि है, क्योंकि ऐप का लक्ष्य एक आईसीएस और ऊपर):

private void showDialog() { 
    SettingsDialogFragment diag = (SettingsDialogFragment) getFragmentManager().findFragmentByTag(DIALOG_TAG); 
    if (diag == null) { 
     diag = new SettingsDialogFragment(); 
     diag.show(getFragmentManager(), DIALOG_TAG); 
    } else { 
     if (!diag.isVisible()) 
      diag.show(getFragmentManager(), DIALOG_TAG); 
    } 
} 

private void dismissDialog() { 
    SettingsDialogFragment diag = (SettingsDialogFragment) getFragmentManager().findFragmentByTag(DIALOG_TAG); 
    if (diag != null) 
     diag.dismiss(); 
} 
+0

क्या आप सभी प्रासंगिक कोड को पेस्टबिन में डाल सकते हैं? त्रुटि आपके 'FragmentActivity' में भी हो सकती है। – tolgap

+0

@tolgap मेरे पास मेरी गतिविधि पर दो सरल तरीके हैं, मैंने अभी उन्हें पोस्ट में शामिल किया है। गतिविधि एपीआई से कॉलबैक पर एक या दूसरे को कॉल करती है और ऑनपोज़() – Budius

+0

मंद हो जाती है दिलचस्प, उनमें से एक और समझने योग्य खंड IllegalStateExceptions ... मैंने सोचा कि मैंने पहले ही देखा है। – Ixx

उत्तर

7

जाहिर है गूगल ICS की ओर से कुछ जेबी के लिए बदल गया है और खारिज करने के लिए संवाद का उपयोग करना था:

dismiss(); 
getFragmentManager().beginTransaction().remove(frag).commit(); 

ऐसा लगता है कि संवादफ्रैग अगर आप स्रोत कोड में खोदने और कम्युनिटी के लिए दोबारा जांच करने की परवाह करते हैं, तो यह विवाद प्रबंधक ऑनडिस्मिस से खुद को हटा नहीं रहा है, यह सुपर होगा।

धन्यवाद।

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