มีการอ้างอิงถึงเอกสารอย่างเป็นทางการ ( 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 ปัจจุบันและกล่องโต้ตอบจะถูกทำลายและรายการก่อนหน้านี้ (ถ้ามี) จะแสดงขึ้นมาใหม่ โปรดทราบว่าในกรณีนี้ DialogFragment จะดูแลการเปิดธุรกรรมของกล่องโต้ตอบจะถูกปิดแยกต่างหากจากมัน
สำหรับความต้องการของฉันฉันเปลี่ยนเป็น:
FragmentManager manager = getSupportFragmentManager();
Fragment prev = manager.findFragmentByTag(TAG);
if (prev != null) {
manager.beginTransaction().remove(prev).commit();
}
MyDialogFragment fragment = new MyDialogFragment();
fragment.show(manager, TAG);