2014-10-20 32 views
3

我只是試圖在Android中保留一個對話框,我認爲這很簡單。但它不工作,因爲我認爲它會。我有一個名爲StartMonitoringDialogFragmentActivity簡單成員類別,它擴展DialogFragment。在我的活動中,我展示它:Android DialogFragment在方向更改時未保留

StartMonitoringDialogFragment dialog = new StartMonitoringDialogFragment(); 
    dialog.show(getFragmentManager(), getClass().getName() + "StartDialog"); 

但是,對話框不會出現在方向更改上。我注意到片段onCreateView在方向更改後正確調用,正在創建並正確返回其視圖(片段仍然設置的實例變量),但是沒有顯示任何內容。它不應該顯示嗎?我需要手動跟蹤嗎?

編輯 我試圖通過添加

Fragment dialog; 
    if(savedInstanceState != null && (dialog = getFragmentManager().findFragmentByTag(getClass().getName() + "StartDialog")) != null) { 
     ((DialogFragment)dialog).show(getFragmentManager(), getClass().getName() + "StartDialog"); 
    } 

到我的活動onCreate(Bundle savedInstanceState)方法來解決這個問題,它起初似乎工作,但我現在經常面臨的一個例外java.lang.IllegalStateException: Fragment already added。任何想法該怎麼辦?

回答

3

這是一個known issue,由於某種原因,即使沒有支持庫也會出現這種情況。

在任何情況下,一個解決辦法,我已經找到工作,是加入這個給你讓每個DialogFragment(或基地之一,所有將延長,當然):

@Override 
public void onDestroyView() { 
    //workaround for this issue: https://code.google.com/p/android/issues/detail?id=17423 (unable to retain instance after configuration change) 
    if (getDialog() != null && getRetainInstance()) 
     getDialog().setDismissMessage(null); 
    super.onDestroyView(); 
} 
相關問題