2010-10-09 4 views
2

У меня есть мультиселемент ListView в моем приложении для Android. Мне нужно знать, сколько элементов в этом списке я выбрал.Получить количество выбранных элементов в android ListView

+1

FYI, не пишите «решить» в названии вопроса, когда у вас есть решение, вместо этого, просто отметьте правильный ответ с «галочкой» (можно найти под вверх/вниз голосования, должно быть просто укажите схему, пока вы ее не выберите. Это позволяет сайту правильно управлять вопросом. –

ответ

3

Я нашел решение. 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++; 
     } 
    } 
} 
+0

Вы также можете использовать: 'theListView.getCheckedItemIds(). size();' Не уверен, что это будет быстрее (зависит от внутренней реализации) но может быть немного яснее для других людей, смотрящих на код. –

+2

, но массив, созданный getChekItemIds(), не уменьшается при снятии отметки с элемента. – IronMonkey

+0

На самом деле код, который вы опубликовали, имел ошибку, поскольку SparseBooleanArray.get() принимает ключ и не обязательно совпадает с индексом в массиве. Исправить было немного o сложно объяснить в комментарии, поэтому я просто пошел и отредактировал ваш ответ. –

5

Использование getCheckedItemCount() из ListView. Это дает вам прямо int.

+3

Доступно только на API 11+:/ –

+0

У меня нет никаких предупреждений или ошибок, но он доступен только для API 11 и более поздних версий, принятый ответ совместим со всеми версиями Android – 2016-05-17 23:30:43

2

Вместо 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++; 
    } 
}