2012-08-24 16 views
8

Właśnie zacząłem używać DialogFragment z biblioteki pomocy Androida i uważam, że jest to wyjątkowo irytujące. Mam niestandardowe AsyncTasks, które są wywoływane z różnych miejsc w mojej aplikacji. Istnieją dwie sytuacje, kiedy napotkasz problemy z DialogFragments:Wyjątek IllegalStateException podczas korzystania z DialogFragment

  1. Podczas debugowania i ekran gaśnie
  2. Kiedy chcę otworzyć FragmentDialog z onActivityResult()

oba, przynajmniej Myślę, że są dość częste sytuacje, w obu przypadkach dostaję

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 

ten sposób moi AsyncTasks mają strukturę:

private class UploadImageAsyncTask extends AsyncTask<Void, Void, Image> { 
    private ProgressDialogFragment dialog; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     FragmentManager fm = getSupportFragmentManager(); 
     dialog = new ProgressDialogFragment(); 
     dialog.show(fm, "ProgressDialogFragment"); 
    } 

    @Override 
    protected Image doInBackground(Void... params) { 
     ... 
    } 

    @Override 
    protected void onPostExecute(Image result) { 
     super.onPostExecute(result); 
     dialog.dismiss(); 

     ... 
     } 
    } 
} 

wiem, mogę ustawić ustawienie, które zapobiega ekran przed pójściem spać podczas debugowania i mogę ustawić flagę w onActivityResult(), a następnie otworzyć okno w onStart(), ale to nie jest naprawdę to, co ja Szukam. Czy są jakieś lepsze rozwiązania?

Dzięki Simon

+0

Jest to jeden z najbardziej irytujących problemów, jakie napotykają w rozwoju Android. Nieaktualne interfejsy API dialogów nie miały tego problemu. Wszystkie obejścia są tak brzydkie. Nadal nie mogłem znaleźć czystego rozwiązania tego problemu. –

+0

Ja też nie. Wciąż czekam na kogoś, kto pokazał mi czyste rozwiązanie: - \ – SimonSays

Odpowiedz

4

użycie dialog.dismissAllowingStateLoss(); zamiast dialog.dismiss();

Powiązane problemy