AlertDialog MultiChoiceItems Problemas de escucha

Actualmente utilizo AlertDialog.builder para crear una lista de varias opciones para el usuario (casillas de verificación). Esto funciona muy bien, excepto que queremos que uno de los botones para anular la selección de todos los demás en la lista.

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 "true", se verificará la casilla con éxito, pero cuando se utiliza false, no se desmarca (a menos que haya configurado manualmente a true antes de mano). ¿Hay un oyente separado que debería estar usando para detectar cuando un usuario hace clic en estos ? Me parece que hay dos marcas de verificación establecidas, una por el "setItemChecked (0, true);", y una de hecho seleccionándola.

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

¡¡¡OH!!! Lo olvidé para asegurar que deseleccione que debe cambiar marcado a null;), tuve el mismo problema.

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

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

No creo que pueda cambiar los valores en la lista ya que los elementos de lista (casillas de verificación) son controlados por el constructor-objeto. Sin embargo, usted podría simplemente hacer que el diálogo vuelva a iniciar cuando se hace clic en el primer elemento … descartando el diálogo que se está mostrando, y crear uno nuevo ….

Si desea establecer una casilla de verificación para que no se compruebe y debe establecer la matriz checkedItems en la llamada a setMultiChoiceItems() , también deberá establecer los elementos de la matriz marcada como falsos. Asegúrese de que su matriz comprobada es final para que pueda acceder a ella en el listener.

 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); } } } } }); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.