为什么在Dialog时没有销毁DialogFragment?

时间:2016-09-02 01:14:05

标签: android android-fragments android-dialogfragment

正如标题所说,为什么Android会在DialogFragment发生configChange时保持Dialog处于打开状态,而任何类型的configChangeAndroid被销毁后立即被销毁?是因为Context并不想保留对传递给Dialog的{​​{1}}的引用吗?如果是这样,那么他们在DialogFragment发生时configChange如何实际存活?

编辑:我知道正在重新创建dialogFragment,为什么他们也不会对Dialogs做同样的事情?

2 个答案:

答案 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来节省时间。