2015-05-04 15 views
5

Poniżej mój kod dla mojego AlertDialog.Builderzestaw pól wyboru w Multichoice AlertDialog w 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(); 

Co chcę zrobić, to być w stanie wykryć, kiedy „Zaznacz wszystko” jest zaznaczone, które mogę z isChecked pętla. Ale chcę mieć możliwość ustawienia wszystkich opcji do sprawdzenia, gdy użytkownik zaznaczy opcję "Wybierz wszystko" i usunie sprawdzenia, gdy użytkownik odznaczy opcję "Wybierz wszystko".

Odpowiedz

3

Powinien to być następujący kod. Kluczową kwestią jest dostarczenie macierzy boolean[] z checkedItems i zaktualizowanie jej później, gdy spróbujesz wybrać wszystkie.

  • checkedItems tablica powinna być aktualizowana (ponieważ Dialog nadal ma odniesienie do niego.)
  • I dialog.getListView().setItemChecked(i, true); powinna zostać wywołana dla każdego elementu.

    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: Dzięki, to działa! – Susheel