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
onClicktrả 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 |