2014-10-20 74 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(); 
}