AlertDialog MultiChoiceItems Проблемы со слушателем
В настоящее время я использую 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 ответа
ОЙ!!! Я забываю это, чтобы отменить выбор, который вы должны изменить, помеченный как null;), у меня была та же проблема.
builder.setMultiChoiceItems(list, null, new DialogInterface.OnMultiChoiceClickListener() {
...
Чтобы отменить выбор других элементов, он работает нормально:
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);
}
}
Не думайте, что вы можете изменить значения в списке, так как элементы списка (флажки) управляются объектом-строителем. Тем не менее, вы можете просто заставить диалоговое окно повторно запускаться при щелчке по первому элементу..., закрыв отображаемый диалог и создав новый.
Если вы хотите установить флажок, который не будет установлен, и вам нужно установить 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);
}
}
}
}
});