2009-10-28 11 views
6

Actualmente estoy usando el AlertDialog.builder para crear una lista multicorte para el usuario (casillas de verificación). Esto funciona muy bien, excepto que queremos que uno de los botones anule la selección de todos los demás en la lista.AlertDialog MultiChoiceItems Problemas del Oyente

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); 

    } 
    } 
    }); 

Cuando se utiliza "verdadero" se comprobará con éxito la caja, pero cuando se usa falsa no desactivarla (a menos que haya ajustado manualmente a true antes de la mano.) ¿Hay un oyente separada que debería usar para detectar cuando un usuario hace clic en estos? Me parece que hay dos marcas de verificación establecidas, una por "setItemChecked (0, true);" y otra por seleccionarla.

Esto me ha estado volviendo loco durante un par de días, cualquier ayuda sería muy apreciada.

Respuesta

1

No creo que pueda cambiar los valores en la lista ya que los elementos de la lista (casillas de verificación) están controlados por el objeto constructor. Sin embargo, puede simplemente reiniciar el cuadro de diálogo cuando se hace clic en el primer elemento ... descartando el cuadro de diálogo que se muestra y creando uno nuevo ...

3

Para anular la selección de los otros elementos funciona bien: :

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); 
    } 
} 
8

OH !!! Me olvido de que para anular la selección debes cambiar el valor marcado como nulo;), tuve el mismo problema.

builder.setMultiChoiceItems(list, null, new DialogInterface.OnMultiChoiceClickListener() { 
... 
+1

Me has ahorrado mucho tiempo :) ¡Gracias! Estaba configurando todos los elementos con falso, ¡pero parece que nulo es todo lo que necesitaba! – tereru

0

Si desea establecer una casilla de verificación para no ser comprobado y es necesario configurar la matriz checkedItems en la llamada a setMultiChoiceItems(), es necesario establecer los elementos de matriz controladas a falsa también. Asegúrese de que su matriz comprobada sea definitiva para que pueda acceder a ella en el oyente.

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); 
     } 
    } 
    } 
    } 
});