正如标题所说,为什么Android会在DialogFragment
发生configChange
时保持Dialog
处于打开状态,而任何类型的configChange
在Android
被销毁后立即被销毁?是因为Context
并不想保留对传递给Dialog
的{{1}}的引用吗?如果是这样,那么他们在DialogFragment
发生时configChange
如何实际存活?
编辑:我知道正在重新创建dialogFragment
,为什么他们也不会对Dialogs
做同样的事情?
答案 0 :(得分:1)
DialogFragment也被销毁,但随后又被重新创建。 随setArguments(Bundle)提供的数据将被保留,并可用于恢复片段的初始状态。
答案 1 :(得分:0)
好的,在我深入了解int charToDigit(char character){
return character-64; //or character-0x40 if you prefer hex
}
的源代码后,我发现它只是DialogFragment
处理当前Fragment
configChanges
{ {1}}并在savingInstance
更改后重新创建
当我们实际调用Fragment
时,框架会创建一个Orientation
来处理dialogFragment.show(getSupportFragmentManager(),TAG)
Fragment
,例如
Dialog
在lifeCycle
方法中,它会恢复
@Override public void onCreate(Bundle savedInstanceState) {
if (savedInstanceState != null) {
mStyle = savedInstanceState.getInt(SAVED_STYLE, STYLE_NORMAL);
mTheme = savedInstanceState.getInt(SAVED_THEME, 0);
mCancelable = savedInstanceState.getBoolean(SAVED_CANCELABLE, true);
mShowsDialog = savedInstanceState.getBoolean(SAVED_SHOWS_DIALOG, mShowsDialog);
mBackStackId = savedInstanceState.getInt(SAVED_BACK_STACK_ID, -1);
}
}
个参数
onCreate
并恢复中的Dialog
实例
onSaveInstanceState(Bundle outState)
致电dialog
因此,当我们实际使用@Override public void onActivityCreated(Bundle savedInstanceState) {}
时,mDialog.onRestoreInstanceState(dialogState);
可以通过处理DialogFragment
显示时可能出现的Framework
来节省时间。