首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android AlertDialog 單選列表:正確顯示與生命週期管理

     編輯:程式設計綜合問答

常見錯誤

在 onCreateDialog 中建立 AlertDialog.Builder 後忘記呼叫 show(),或直接返回 super.onCreateDialog(id) 導致對話框不顯示。

正確模式(API 13+ 建議使用 DialogFragment)

若維護舊專案必須用 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 索引

現代寫法:DialogFragment

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");

優點:生命週期自動管理、配置變更(旋轉螢幕)不崩潰、程式碼解耦。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved