2011-12-22 13 views
8

tôi đang cố gắng để làm một Dialog với một selector mà trông giống hệt như thế này:AlertDialog với selector

AlertDialog with selector

Tôi đã thử sử dụng một AlertDialog chứa một ListView, nhưng điều đó đưa ra một đường viền màu đen xấu xí giữa ListView và khu vực màu xám phía dưới. Tôi có thể sử dụng một Dialog bình thường, nhưng tôi không muốn xây dựng khu vực màu xám dưới một cách thủ công.

Tôi biết rằng tôi có thể phân lớp AlertDialog, nhưng sau đó tôi cũng cần phải phân lớp Trình tạo và kết thúc là có nhiều mã cho một chi tiết nhỏ như vậy. Có cách nào gọn gàng để làm việc này không?

Chúc mừng,

Trả lời

28

Sử dụng trình tạo hộp thoại cảnh báo, nó có các tùy chọn cho điều đó. Ví dụ viết tắt:

AlertDialog.Builder adb = new AlertDialog.Builder(this); 
CharSequence items[] = new CharSequence[] {"First", "Second", "Third"}; 
adb.setSingleChoiceItems(items, 0, new OnClickListener() { 

     @Override 
     public void onClick(DialogInterface d, int n) { 
      // ... 
     } 

}); 
adb.setNegativeButton("Cancel", null); 
adb.setTitle("Which one?"); 
adb.show(); 

Xem dialogs doc, phần Thêm một danh sách.

+2

tôi đề nghị bạn thực hiện nó như adb.setSingleChoiceItems này (mục, -1, DialogInterface.OnClickListener mới() –

+0

@AbdulazizNoor Tại sao? – Jaec

+0

@Jaec thực sự tôi quên tại sao loooool –

2

Bạn nên sử dụng mã sau để chọn một mục. Đây đang làm việc

CharSequence colors[] = new CharSequence[]{"View PDF", "Reduce Size", "Delete PDF", "Share PDF"}; 

      AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
      builder.setTitle("Select Option"); 
      builder.setItems(colors, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        Log.e("value is", "" + which); 
        switch (which) { 
         case 0: 
          break; 
         case 1: 
          break; 
         case 2: 
          break; 
         case 3: 
          break; 
        } 
       } 
      }); 
      builder.show();