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

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

ตัวอย่างนี้สาธิตวิธี เพิ่ม Radio Button List (Single 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>

ใช้ TextView เป็นทริกเกอร์เปิด Dialog

ขั้นตอนที่ 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"};
        int checkedItem = 1; // Default เลือก "Android" (index 1)

        alertDialog.setSingleChoiceItems(items, checkedItem, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                switch (which) {
                    case 0:
                        Toast.makeText(MainActivity.this, "Clicked on Java", Toast.LENGTH_LONG).show();
                        break;
                    case 1:
                        Toast.makeText(MainActivity.this, "Clicked on Android", Toast.LENGTH_LONG).show();
                        break;
                    case 2:
                        Toast.makeText(MainActivity.this, "Clicked on Data Structures", Toast.LENGTH_LONG).show();
                        break;
                    case 3:
                        Toast.makeText(MainActivity.this, "Clicked on HTML", Toast.LENGTH_LONG).show();
                        break;
                    case 4:
                        Toast.makeText(MainActivity.this, "Clicked on CSS", Toast.LENGTH_LONG).show();
                        break;
                }
            }
        });

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

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

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

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

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

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

คำอธิบายเมธอดสำคัญ

  • setSingleChoiceItems(CharSequence[] items, int checkedItem, OnClickListener) - แสดงรายการแบบ Radio Button (เลือกได้อย่างเดียว)
  • checkedItem - Index ของ Item ที่เลือกตั้งแต่แรก (-1 = ไม่เลือกอะไร)
  • OnClickListener - เรียกทุกครั้งที่ผู้ใช้เลือก Item (Dialog ไม่ปิดอัตโนมัติ)

การปิด Dialog หลังเลือก (Best Practice)

ปกติ Single Choice Dialog ไม่ปิดอัตโนมัติหลังเลือก ต้องเพิ่มปุ่ม OK/Cancel หรือปิดใน Listener:

alertDialog.setSingleChoiceItems(items, checkedItem, (dialog, which) -> {
    // ทำงานเมื่อเลือก
    selectedItem = which;
    dialog.dismiss(); // ปิด Dialog ทันที
});

การรับค่าที่เลือกหลัง Dialog ปิด

alertDialog.setPositiveButton("OK", (dialog, which) -> {
    // ใช้ selectedItem ที่เก็บไว้
    Toast.makeText(this, "Selected: " + items[selectedItem], Toast.LENGTH_SHORT).show();
});
alertDialog.setNegativeButton("Cancel", null);