Android - Получить isChecked () для элементов в AlertDialog? - PullRequest
1 голос
/ 27 октября 2011

Я создал AlertDialog с элементами-флажками, используя setMultiChoiceItems(). Я добавил setPositiveButton() и setNegativeButton() в диалог.

Когда я нажимаю положительную кнопку, я хочу перебрать список элементов в диалоге и определить, отмечен ли каждый из них или нет. Но, похоже, нет никакого очевидного способа сделать это.

Я могу получить список предметов из этого:

alertDialog.getListView().getItemAtPosition(n);

но я не могу проверить, есть ли пункт isChecked() или что-то в этом роде. Все, что я могу сделать, это распечатать текст, используя .toString().

Единственный другой способ сделать то, что я хочу, - это использовать onMultiChoiceClickListener().onClick(), чтобы прослушивать, когда проверяется элемент, а затем определять, по какому элементу щелкнули, и если он отмечен или нет. Затем мне нужно сохранить эту информацию в массиве или списке, а затем, когда нажата положительная кнопка, мне нужно обратиться к этому массиву, чтобы определить, что проверено, а что нет. Я знаю, что этот метод будет работать, но есть ли программный способ проверить, проверен ли элемент по факту или нет?

Ответы [ 2 ]

2 голосов
/ 28 октября 2011

Я нашел свой ответ. Я просто искал неправильный метод.

Решение alertDialog.getListView().isItemChecked(position);

Обновление. Это глючит

Я говорил слишком рано. Я думаю, что обнаружил ошибку Android с этим методом. Если в вашем списке есть большое количество элементов, до того момента, когда список можно прокручивать, и вам нужно прокрутить список вниз, чтобы увидеть их, элементы возвращаются как НЕПРОВЕРЕННЫЕ, даже если они отмечены по умолчанию, если элемент не имеет прокрутили на экран еще. Я сообщил об этом здесь .

2 голосов
/ 28 октября 2011

Самый простой и, вероятно, самый грязный ответ - бросить на CheckBox ((CheckBox) alertDialog.getListView () getItemAtPosition (п).) IsChecked (). // делаем проверку экземпляра перед приведением, чтобы избежать ClassCastException

Другой способ - расширить диалоговое окно оповещения (добавить метод, который будет возвращать выбранные флажки) или передать объект (связку или еще много чего, содержащий массив или список), который будет содержать выбранные элементы для вас, так или иначе В этом случае вам нужно будет использовать onMultiChoiceClickListener (). onClick (). Вам не нужно проверять его после того, как факт в массиве просто удалите из массива, если флажок снят, и добавьте, если он отмечен в методе onClick. Или вы можете использовать карту (см. Multimap: google guava или apache), в которой в качестве ключа выбрано и не выбрано значение, а в качестве значения - флажок (предпочтительно объект поддержки).

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...