AlertDialog MultiChoiceItems Проблемы со слушателем - PullRequest
7 голосов
/ 29 октября 2009

В настоящее время я использую AlertDialog.builder для создания списка для нескольких пользователей (флажки). Это прекрасно работает, за исключением того, что мы хотим, чтобы одна из кнопок отменила выбор всех остальных в списке.

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);

    }
   }
  });

При использовании «true» он успешно установит флажок, но при использовании «false» он не снимает флажок (если только я вручную не установил для него значение «true»). Есть ли отдельный слушатель, который я должен использовать, чтобы определить пользователь нажимает эти? Мне кажется, что установлены две галочки, одна с помощью "setItemChecked (0, true);", а другая - путем ее фактического выбора.

Это сводит меня с ума уже пару дней, любая помощь будет принята с благодарностью.

Ответы [ 4 ]

8 голосов
/ 21 января 2010

ОН !!! Я забыл об этом, чтобы отменить выбор, который вы должны изменить, помеченный как null;) У меня возникла та же проблема.

    builder.setMultiChoiceItems(list, null, new DialogInterface.OnMultiChoiceClickListener() {
...
3 голосов
/ 20 января 2010

Чтобы отменить выбор других элементов, он отлично работает ::

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);
    }
}
1 голос
/ 28 ноября 2009

Не думайте, что вы можете изменить значения в списке, поскольку элементы списка (флажки) контролируются объектом-строителем. Однако вы можете просто заставить диалоговое окно повторно запускаться при щелчке по первому элементу ..., закрыв отображаемый диалог и создавая новый ....

0 голосов
/ 06 октября 2013

Если вы хотите установить флажок, который не должен быть отмечен, и вам нужно установить массив checkedItems при вызове на setMultiChoiceItems(), вам также нужно установить в проверенные элементы массива значение false. Убедитесь, что ваш проверенный массив является окончательным, чтобы вы могли получить к нему доступ в слушателе.

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);
        } 
     }
   }
  }
});
...