在 onCreateDialog 中建立 AlertDialog.Builder 後忘記呼叫 show(),或直接返回 super.onCreateDialog(id) 導致對話框不顯示。
若維護舊專案必須用 onCreateDialog:
@Override
@Deprecated
protected Dialog onCreateDialog(int id) {
if (id == DIALOG_SINGLE_CHOICE) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("選擇選項");
builder.setSingleChoiceItems(R.array.Baani, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 處理選項點擊
}
});
builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 確定邏輯
}
});
builder.setNegativeButton("取消", null);
return builder.create(); // 直接返回建立好的 Dialog
}
return super.onCreateDialog(id);
}
.create().show() —— showDialog() 會自動顯示builder.create() 而非 super.onCreateDialog()which 索引public class SingleChoiceDialogFragment extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(requireActivity())
.setTitle("選擇選項")
.setSingleChoiceItems(R.array.Baani, 0, (dialog, which) -> { /* ... */ })
.setPositiveButton("確定", (dialog, which) -> { /* ... */ })
.setNegativeButton("取消", null)
.create();
}
}
// 顯示
new SingleChoiceDialogFragment().show(getSupportFragmentManager(), "single_choice");
優點:生命週期自動管理、配置變更(旋轉螢幕)不崩潰、程式碼解耦。