2016-09-02 11 views
0

というタイトルで、configChangeがあるとすぐにDialogのいずれかのタイプが破棄されている間に、configChangeが発生したときにAndroidがDialogFragmentを開いているのはなぜですか? AndroidDialogに渡されたContextへの参照を保持したくないからですか?もしそうなら、実際にの生き残り方はconfigChangeであるのですか?なぜDialogFragmentが破壊されていないのですか?

編集:私はdialogFragmentが再作成されていることを知っていますが、彼らはDialogsと同じようにしませんか?

答えて

0

さて、私は掘るインした後、私はそのだけで、現在のFragmentsavingInstanceとによってconfigChangesを扱うFragment変更Orientationでそれを再作成することが判明DialogFragmentのソースコードに。私たちが実際にdialogFragment.show(getSupportFragmentManager(),TAG) Frameworkは例えばDialoglifeCycleそれは

onSaveInstanceState(Bundle outState) 

内に保存し、中dialogインスタンスを復元しているDialogパラメータを復元onCreate方法で

@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); 
    } 
} 

を扱うFragmentを作成呼び出す

@Override public void onActivityCreated(Bundle savedInstanceState) {}
私たちは実際にFrameworkDialogsが表示されている間に発生する可能性があるconfigChangesを取り扱うことにより、私たちの時間を節約DialogFragmentを使用するときにmDialog.onRestoreInstanceState(dialogState);

を呼び出すことによって。

1

DialogFragmentも破棄されますが、再作成されます。 setArguments(Bundle)で提供されるデータは保持され、フラグメントの初期状態を復元するために使用できます。

+0

しかし、dialogfragmentは実際には種類のダイアログの種類ではありませんか? – k0sh

+0

k0sh:いいえ、それはダイアログを管理するいくつかのロジックを持つ断片です。 – Rediska

+0

ええと、後で私のラップトップに着き、実際に何が起こっているのかを見つけるためにソースコードを掘り下げてみましょう。ありがとう、+1 – k0sh

関連する問題