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

Android AlertDialog 單選列表選擇後自動關閉的實現方法

     編輯:程式設計綜合問答

在 Android 中使用 AlertDialog.Builder.setSingleChoiceItems() 顯示單選列表時,用戶選擇項目後對話框不會自動關閉,需在點擊監聽器中手動調用 dialog.dismiss()。

問題代碼

builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int item) {
        Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
        // 缺少 dialog.dismiss(),對話框不會關閉
    }
});

解決方法

final CharSequence[] items = {"第一個選項", "第二個選項"};
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("請選擇選項");

builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // 1. 處理選擇邏輯
        String selected = items[which].toString();
        Toast.makeText(context, "已選擇: " + selected, Toast.LENGTH_SHORT).show();
        
        // 2. 關鍵:手動關閉對話框
        dialog.dismiss();
    }
});

AlertDialog alert = builder.create();
alert.show();

進階:獲取選中項索引並保存

private int selectedIndex = -1; // 成員變量保存選擇

builder.setSingleChoiceItems(items, selectedIndex, (dialog, which) -> {
    selectedIndex = which; // 更新選中索引
    dialog.dismiss();
    
    // 後續處理:如保存到 SharedPreferences
    // prefs.edit().putInt("selected_option", which).apply();
});

注意事項

  • dialog.dismiss() 必須在 onClick 回調中調用,否則對話框保持打開
  • 第二個參數 checkedItem 設置初始選中項 (-1 表示無選中)
  • 若需「確定/取消」按鈕確認選擇,應改用 setItems() 配合按鈕,而非 setSingleChoiceItems()

替代方案:MaterialDialog (第三方庫)

new MaterialDialog.Builder(this)
    .title("請選擇")
    .items(items)
    .itemsCallbackSingleChoice(selectedIndex, (dialog, view, which, text) -> {
        selectedIndex = which;
        return true; // true 表示允許關閉
    })
    .positiveText("確定")
    .show();

單選 vs 列表選擇對比

方法特點適用場景
setSingleChoiceItems單選圓點、即時選中、需手動 dismiss簡單單選、設置類選項
setItems無選中標記、點擊項目觸發 onClick、通常配合按鈕動作列表、功能選單
setMultiChoiceItems多選框、支持多選標籤選擇、權限設置
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved