2011-07-05 7 views
7

Solía ​​SparseBooleanArray para obtener posiciones de ListItems controladas en una vista de lista:Listview.getCheckedItemPositions() no devolver resultado correcto cuando el artículo está sin marcar

// lv is my listview 
final SparseBooleanArray checkedItems = lv.getCheckedItemPositions(); 

Esto funciona bien cuando puedo comprobar un elemento de lista. Pero cuando desactivé un elemento de la vista de lista, su tamaño no disminuyó. Permaneció como estaba.

Voy a explicar lo que está ocurriendo:
primer lugar selecciono 3 ListItems y consigo el tamaño de checkedItems como 3. Pero cuando uncheck de un elemento de la lista, su tamaño no cambia a 2. Se sigue siendo 3.

¿Qué hay que hacer? Amablemente ayúdenme.

Piedra

Respuesta

13

SparseBooleanArray mapas enteros a valores booleanos. El método size() no devuelve la cantidad de elementos true que contiene, devuelve el número de elementos almacenados. Algunos de esos artículos pueden ser false.

Si desea saber el número de elementos marcados, puede recorrer el SparseBooleanArray, puede realizar un seguimiento del número de elementos marcados llamando al isItemChecked() cuando se verifican cambios de estado, o si está en API 11+ (Honeycomb) puede llamar al getCheckedItemCount().

+0

Para confirmar si un elemento en particular está marcado o no, use 'checkedItems.valueAt (i)'. El valor booleano indica el estado verificado del artículo en la posición i. – faizal

3

El SparseBooleanArray no contiene los detalles de todas las filas. Las claves contienen el índice de la fila y el valor contiene si eso está marcado. Si se marcó una fila y luego se desmarcó, la matriz contendrá una entrada para esa fila. Así que para hacer frente a ello, tiene que hacer lo siguiente:

  1. obtener el tamaño llamando int lSize = ObjectOfSparseBooleanArray.size().
  2. ejecutar un bucle como for(int i = 0; i < lSize; i++) {
  3. obtener el número de fila int lPos = ObjectOfSparseBooleanArray.keyAt(i);
  4. obtiene es la fila se comprueba boolean lIsChecked = ObjectOfSparseBooleanArray.get(lPos);
  5. Haga su procesamiento para las filas seleccionadas!
Cuestiones relacionadas