Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีเพิ่ม Checkbox List ใน Alert Dialog

ตัวอย่างนี้สาธิตวิธี เพิ่ม Checkbox List (Multi-Choice) ใน Alert Dialog

ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่ใน Android Studio

ไปที่ File → New Project และกรอกรายละเอียดที่จำเป็นทั้งหมด

ขั้นตอนที่ 2: เพิ่มโค้ดใน res/layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:gravity="center"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/click"
        android:layout_width="wrap_content"
        android:textSize="30sp"
        android:layout_height="wrap_content"
        android:text="Click" />
</LinearLayout>

ขั้นตอนที่ 3: เพิ่มโค้ดใน src/MainActivity.java

package com.example.myapplication;

import android.annotation.TargetApi;
import android.content.DialogInterface;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    TextView text;

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        text = findViewById(R.id.click);
        text.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showAlertDialog();
            }
        });
    }

    private void showAlertDialog() {
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this);
        alertDialog.setTitle("AlertDialog");
        String[] items = {"Java", "Android", "Data Structures", "HTML", "CSS"};
        boolean[] checkedItems = {false, false, false, false, false};

        alertDialog.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                if (isChecked) {
                    switch (which) {
                        case 0:
                            Toast.makeText(MainActivity.this, "Checked: Java", Toast.LENGTH_LONG).show();
                            break;
                        case 1:
                            Toast.makeText(MainActivity.this, "Checked: Android", Toast.LENGTH_LONG).show();
                            break;
                        case 2:
                            Toast.makeText(MainActivity.this, "Checked: Data Structures", Toast.LENGTH_LONG).show();
                            break;
                        case 3:
                            Toast.makeText(MainActivity.this, "Checked: HTML", Toast.LENGTH_LONG).show();
                            break;
                        case 4:
                            Toast.makeText(MainActivity.this, "Checked: CSS", Toast.LENGTH_LONG).show();
                            break;
                    }
                }
            }
        });

        AlertDialog alert = alertDialog.create();
        alert.setCanceledOnTouchOutside(false);
        alert.show();
    }
}

การทดสอบแอปพลิเคชัน

รันแอปพลิเคชันบนอุปกรณ์ Android จริง ใน Android Studio คลิกไอคอน Run เลือกอุปกรณ์ แล้วตรวจสอบหน้าจอเริ่มต้น

วิธีเพิ่ม Checkbox List ใน Alert Dialog

คลิก TextView จะเปิด Alert Dialog พร้อม Checkbox List

วิธีเพิ่ม Checkbox List ใน Alert Dialog

คำอธิบาย setMultiChoiceItems()

  • items - Array ของข้อความแต่ละรายการ
  • checkedItems - Boolean Array สถานะเริ่มต้นของแต่ละ Checkbox (true = ติ๊ก, false = ไม่ติ๊ก)
  • OnMultiChoiceClickListener - Callback เมื่อผู้ใช้ติ๊ก/ยกเลิกติ๊ก (which = index, isChecked = สถานะใหม่)
  • Array checkedItems จะถูกอัปเดตอัตโนมัติโดยระบบ

การรับค่าที่เลือกหลังกด OK (Best Practice)

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Select Items");
String[] items = {"Java", "Android", "Kotlin"};
boolean[] checkedItems = {false, true, false}; // Default

builder.setMultiChoiceItems(items, checkedItems, (dialog, which, isChecked) -> {
    // Optional: Real-time feedback
    checkedItems[which] = isChecked; // Sync manual (optional, system does it)
});

builder.setPositiveButton("OK", (dialog, which) -> {
    // รับค่าที่เลือก
    List<String> selected = new ArrayList<>();
    for (int i = 0; i < checkedItems.length; i++) {
        if (checkedItems[i]) selected.add(items[i]);
    }
    Toast.makeText(this, "Selected: " + selected, Toast.LENGTH_SHORT).show();
});

builder.setNegativeButton("Cancel", null);
builder.show();

การปรับแต่ง Checkbox List (Advanced)

  • Custom Layout per Item - ใช้ setAdapter() กับ Custom Adapter แทน setMultiChoiceItems
  • Disable บาง Item - Custom Adapter + ViewHolder.setEnabled(false)
  • Group Header - ใช้ Sectioned RecyclerView Adapter ใน Dialog
  • Search/Filter - เพิ่ม EditText ด้านบน Dialog สำหรับกรองรายการ

หมายเหตุ

Dialog ที่สร้างด้วย AlertDialog.Builder และ setMultiChoiceItems() จะ ไม่ปิดอัตโนมัติ เมื่อติ๊ก Checkbox ต้องกดปุ่ม OK/Cancel หรือปิดด้วย Back Button