2015-05-04 14 views
5

seguito è il mio codice per la mia AlertDialog.BuilderSet caselle in Multichoice AlertDialog in Android

final String[] values = new String[] {"Select All", "Android", "ios", "windows", "Blackberry"}; 
    final ArrayList<String> selecteditems = new ArrayList<String>(); 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle("Select your favorite OS"); 
     builder.setMultiChoiceItems(values, null , new DialogInterface.OnMultiChoiceClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which, boolean isChecked) { 

      if (isChecked) { 
       selecteditems.add(String.valueOf(which)); 

      } else { 

       selecteditems.remove(Integer.valueOf(which)); 
      } 
     } 
    }) 
    .setPositiveButton("OK", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.dismiss(); 

     } 
    }) 
    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.dismiss(); 

     } 
    }); 

    AlertDialog dialog = builder.create(); 
    dialog.show(); 

Quello che voglio fare è quello di essere in grado di rilevare quando 'Seleziona tutto' è selezionata, che posso dalla isChecked ciclo continuo. Ma voglio essere in grado di impostare tutte le opzioni da spuntare quando l'utente controlla 'Seleziona tutto' e rimuovere i controlli quando l'utente deseleziona 'Seleziona tutto'.

risposta

3

Dovrebbe essere qualcosa come il seguente codice. Il punto chiave è fornire un array boolean[] di checkedItems e aggiornarlo in seguito quando si tenta di selezionare tutto.

  • checkedItems array deve essere aggiornato (perché la finestra ha ancora riferimento ad esso.)
  • E dialog.getListView().setItemChecked(i, true); dovrebbe essere chiamato per ogni articolo.

    items.add(0, "Select All"); 
    
    boolean[] checkedItems = new boolean[items.size()]; 
    
    AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); 
    builder.setTitle(dialogTitle) 
         .setMultiChoiceItems(items.toArray(new String[items.size()]), checkedItems, new DialogInterface.OnMultiChoiceClickListener() { 
    
          @Override 
          public void onClick(DialogInterface dialog, int which, boolean isChecked) { 
    
           if(which == 0) { 
            if(isChecked) { 
             multichoiceDialog.getListView().setItemChecked(0, true); 
             checkedItems[0] = true; 
             for(int i=1; i< checkedItems.length; i++) { 
              checkedItems[i] = true; 
              multichoiceDialog.getListView().setItemChecked(i, true); 
             } 
    
            } 
           } 
          } 
         }) 
         .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 
    
          @Override 
          public void onClick(DialogInterface dialog, int which) { 
    
          } 
         }); 
    
    multichoiceDialog = builder.create(); 
    multichoiceDialog.show(); 
    
+0

tasomaniac: Grazie, ha funzionato! – Susheel