У меня есть мультиселемент ListView в моем приложении для Android. Мне нужно знать, сколько элементов в этом списке я выбрал.Получить количество выбранных элементов в android ListView
ответ
Я нашел решение. getCheckedItemPositions() создаст SparceBooleanArray. Поэтому нужно просто подсчитать элементы, которые верны в этом массиве.
Пример:
SparseBooleanArray positions = theListView.getCheckedItemPositions();
int counter = 0;
if (positions != null) {
int length = positions.size();
for (int i = 0; i < length; i++) {
if (positions.get(positions.keyAt(i))) {
counter++;
}
}
}
Вы также можете использовать: 'theListView.getCheckedItemIds(). size();' Не уверен, что это будет быстрее (зависит от внутренней реализации) но может быть немного яснее для других людей, смотрящих на код. –
, но массив, созданный getChekItemIds(), не уменьшается при снятии отметки с элемента. – IronMonkey
На самом деле код, который вы опубликовали, имел ошибку, поскольку SparseBooleanArray.get() принимает ключ и не обязательно совпадает с индексом в массиве. Исправить было немного o сложно объяснить в комментарии, поэтому я просто пошел и отредактировал ваш ответ. –
Использование getCheckedItemCount() из ListView. Это дает вам прямо int.
Доступно только на API 11+:/ –
У меня нет никаких предупреждений или ошибок, но он доступен только для API 11 и более поздних версий, принятый ответ совместим со всеми версиями Android – 2016-05-17 23:30:43
Вместо keyAt
, а затем get
, мы можем использовать непосредственно valueAt
.
SparseBooleanArray checkedItemPositions = getListView().getCheckedItemPositions();
int count = 0;
for (int i = 0, ei = checkedItemPositions.size(); i < ei; i++) {
if (checkedItemPositions.valueAt(i)) {
count++;
}
}
FYI, не пишите «решить» в названии вопроса, когда у вас есть решение, вместо этого, просто отметьте правильный ответ с «галочкой» (можно найти под вверх/вниз голосования, должно быть просто укажите схему, пока вы ее не выберите. Это позволяет сайту правильно управлять вопросом. –