Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Thêm danh sách đơn giản vào AlertDialog Android

AlertDialog với List Items (Single Click)

Sử dụng AlertDialog.Builder.setItems() để hiển thị danh sách text đơn giản. Mỗi item chỉ xử lý click một lần (không giữ trạng thái chọn như radio/checkbox).

Bước 1: Tạo dự án mới

Khởi tạo project Android Studio.

Bước 2: Layout (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:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center">

    <TextView
        android:id="@+id/click"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Click to show list dialog"
        android:textSize="24sp"
        android:padding="24dp" />

</LinearLayout>

Bước 3: 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 {
    private TextView text;
    
    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        text = findViewById(R.id.click);
        text.setOnClickListener(v -> showAlertDialog());
    }
    
    private void showAlertDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Chọn hành động");
        
        final String[] items = {"Xem hồ sơ", "Chỉnh sửa", "Chia sẻ", "Xóa", "Hủy"};
        
        builder.setItems(items, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                String action = items[which];
                Toast.makeText(MainActivity.this, "Đã chọn: " + action, Toast.LENGTH_SHORT).show();
                
                // Xử lý logic theo action
                switch (which) {
                    case 0: // Xem hồ sơ
                        // openProfile();
                        break;
                    case 1: // Chỉnh sửa
                        // openEditor();
                        break;
                    case 3: // Xóa
                        // confirmDelete();
                        break;
                }
                dialog.dismiss();
            }
        });
        
        builder.setNegativeButton("Đóng", (dialog, which) -> dialog.dismiss());
        
        AlertDialog dialog = builder.create();
        dialog.setCanceledOnTouchOutside(true); // Click ngoài để đóng
        dialog.show();
    }
}

Đặc điểm của setItems()

  • Hiển thị danh sách text thuần túy
  • Không có indicator chọn (radio/checkbox)
  • Callback onClick trả về index item được click
  • Dialog tự động dismiss sau khi click item (mặc định)
  • Phù hợp cho menu hành động nhanh (action menu)

Custom Adapter cho List phức tạp

Nếu cần icon, màu sắc, layout tùy chỉnh cho từng item:

// Custom Adapter
class DialogListAdapter extends ArrayAdapter<String> {
    private int[] icons;
    
    public DialogListAdapter(Context context, String[] items, int[] icons) {
        super(context, R.layout.dialog_list_item, items);
        this.icons = icons;
    }
    
    @NonNull
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView != null ? convertView : LayoutInflater.from(getContext()).inflate(R.layout.dialog_list_item, parent, false);
        TextView tv = view.findViewById(R.id.text);
        ImageView iv = view.findViewById(R.id.icon);
        tv.setText(getItem(position));
        iv.setImageResource(icons[position]);
        return view;
    }
}

// Sử dụng
ListView listView = new ListView(this);
listView.setAdapter(new DialogListAdapter(this, items, icons));
builder.setView(listView);

So sánh nhanh

Cách API Phù hợp cho
Simple list setItems() Menu hành động, context menu
Single choice setSingleChoiceItems() Cài đặt, lựa chọn độc nhất
Multi choice setMultiChoiceItems() Filter, multi-select
Custom view setView() Form nhập liệu, layout phức tạp