他の回答には公式ドキュメントへの参照(DialogFragment Reference)がありますが、そこに示されている例についての言及はありません。
void showDialog() {
mStackLevel++;
// DialogFragment.show() will take care of adding the fragment
// in a transaction. We also want to remove any currently showing
// dialog, so make our own transaction and take care of that here.
FragmentTransaction ft = getFragmentManager().beginTransaction();
Fragment prev = getFragmentManager().findFragmentByTag("dialog");
if (prev != null) {
ft.remove(prev);
}
ft.addToBackStack(null);
// Create and show the dialog.
DialogFragment newFragment = MyDialogFragment.newInstance(mStackLevel);
newFragment.show(ft, "dialog");
}
これにより、現在表示されているダイアログがすべて削除され、引数を使用して新しいDialogFragmentが作成され、バックスタックに新しい状態として表示されます。トランザクションがポップされると、現在のDialogFragmentとそのDialogが破棄され、前のDialogFragment(存在する場合)が再表示されます。この場合、DialogFragmentがポップを処理することに注意してください。Dialogのトランザクションは、それとは別に破棄されます。
私のニーズのために私はそれを次のように変更しました:
FragmentManager manager = getSupportFragmentManager();
Fragment prev = manager.findFragmentByTag(TAG);
if (prev != null) {
manager.beginTransaction().remove(prev).commit();
}
MyDialogFragment fragment = new MyDialogFragment();
fragment.show(manager, TAG);