2009-10-28 3 views
6

Tôi hiện đang sử dụng AlertDialog.builder để tạo danh sách đa hóa cho người dùng (hộp kiểm). Điều này làm việc tuyệt vời, ngoại trừ chúng tôi muốn một trong các nút để bỏ chọn tất cả những người khác trong danh sách.AlertDialog MultiChoiceItems Sự cố đối tượng nghe

builder.setMultiChoiceItems(list, checked, 
    new DialogInterface.OnMultiChoiceClickListener() { 
    public void onClick(DialogInterface dialog, 
    int item, boolean isChecked) { 

    if(item == ANY_ITEM_BUT_0) 
    { 

    ((AlertDialog) dialog).getListView().setItemChecked(0, false); 

    } 
    } 
    }); 

Khi sử dụng "true" nó sẽ kiểm tra thành công hộp, nhưng khi sử dụng sai nó không bỏ chọn nó (trừ khi tôi đã tự đặt nó vào đúng trước mặt.) Có một người biết lắng nghe riêng tôi nên sử dụng để phát hiện thời điểm người dùng nhấp vào các quảng cáo này? Dường như với tôi rằng có hai bộ kiểm tra được thiết lập, một là "setItemChecked (0, true);", và một bằng cách thực sự chọn nó.

Điều này đã khiến tôi phát điên trong vài ngày nay, mọi trợ giúp sẽ được đánh giá cao.

Trả lời

1

Đừng nghĩ rằng bạn có thể thay đổi các giá trị trong danh sách vì các mục danh sách (hộp kiểm) được điều khiển bởi đối tượng người xây dựng. Tuy nhiên, bạn chỉ có thể làm cho hộp thoại bắt đầu lại khi mục đầu tiên được nhấp ... bằng cách loại bỏ hộp thoại đang hiển thị và tạo một hộp thoại mới ....

3

Để bỏ chọn các mục khác hoạt động tốt: :

if(item == ANY_ITEM_BUT_0){  
    for(int i=0; i<items.length;i++){ 
      if (item != ANY_ITEM_BUT_0)        
      ((AlertDialog)dialog).getListView().setItemChecked(i, false); 
    } 
} 
8

OH !!! Tôi quên nó để đảm bảo bỏ chọn bạn phải thay đổi kiểm tra để null;), Tôi đã có cùng một vấn đề.

builder.setMultiChoiceItems(list, null, new DialogInterface.OnMultiChoiceClickListener() { 
... 
+1

Bạn đã tiết kiệm rất nhiều thời gian :) Cảm ơn! Tôi đã thiết lập tất cả các mục với sai, nhưng có vẻ như null là tất cả những gì tôi cần! – tereru

0

Nếu bạn muốn thiết lập một hộp kiểm tra để không bị kiểm tra và bạn cần phải thiết lập các checkedItems mảng trên cuộc gọi đến setMultiChoiceItems(), bạn cần phải thiết lập các mục mảng kiểm tra để sai là tốt. Hãy chắc chắn rằng mảng đã chọn của bạn là cuối cùng để bạn có thể truy cập nó trong trình nghe.

builder.setMultiChoiceItems(list, checked, 
new DialogInterface.OnMultiChoiceClickListener() { 
public void onClick(DialogInterface dialog, 
int item, boolean isChecked) { 

if(isChecked && item == ANY_ITEM_BUT_0) 
{ 
    for(int i=0; i<list.length;i++){ 
     if (i != ANY_ITEM_BUT_0) { 
     checked[i] = false;       
     ((AlertDialog)dialog).getListView().setItemChecked(i, false); 
     } 
    } 
    } 
    } 
});