2012-08-24 93 views
8

我剛剛開始使用Android支持庫中的DialogFragment,並發現它非常討厭到目前爲止。我有一些自定義的AsyncTasks,從我的應用程序的不同地方調用。出現以下兩種情況,當我遇到問題與DialogFragments:IllegalStateException當使用DialogFragment

  1. 調試時,屏幕關閉
  2. 當我想打開從onActivityResult一個FragmentDialog()

兩個,至少我想,是相當普遍的情況,在上述兩種情況下,我得到一個

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

這是我AsyncTasks的結構如何:

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(); 

     ... 
     } 
    } 
} 

我知道我可以設置防止屏幕從去調試時,我可以在onActivityResult設置一個標記(),然後打開在onStart()對話框睡覺的設置,但這並不是真正的我正在尋找。有沒有更好的解決方案?

感謝 西蒙

+0

這是我在Android開發中遇到的最惱人的問題之一。棄用的對話框API沒有這個問題。所有的解決方法都非常難看。我仍然無法找到一個乾淨的解決方案來解決這個問題。 –

+0

我也沒有。我仍在等待有人向我展示一個乾淨的解決方案: - \ – SimonSays

回答

4

使用dialog.dismissAllowingStateLoss();代替dialog.dismiss();

相關問題