2013-03-27 2 views
-5

Я хотел бы знать, как я могу реализовать диалог со списком элементов, где я могу выбрать только 4 флажка. Как я могу это сделать? Любые учебники? у меня есть что-то вроде этого:Диалог с флажками в android

protected void showSelectMeasurementsDialog() { 
     boolean[] checkedMeasurements = new boolean[measurements.length]; 
     int count = measurements.length; 

     for(int i = 0; i < count; i++) 

       checkedMeasurements[i] = selectedMeasurements.contains(measurements[i]); 

     DialogInterface.OnMultiChoiceClickListener measurementsDialogListener = new DialogInterface.OnMultiChoiceClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which, boolean isChecselectedMeasurementsChecked){ 
      if(isChecselectedMeasurementsChecked) 

        selectedMeasurements.add(measurements[which]); 



      else{ 
      selectedMeasurements.remove(measurements[which]); 

      } 

      onChangeSelectedMeasurements(); 
     } 
     }; 

     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("Select Measurements"); 
     builder.setMultiChoiceItems(measurements, checkedMeasurements, measurementsDialogListener); 

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

, но я не знаю, как я могу блокировать выбор элементов, когда я 4 выбран?

ответ

1

Попробуй как этот путь.

public void dialog(View v){ 
String str[] = {"yyyy","xxxx","ccccc","cxcxxc","dadfssaas"}; 
    final AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this); 
    LayoutInflater inflater = getLayoutInflater(); 

    View view = inflater.inflate(R.layout.dialog, null); 
    ListView lv = (ListView)view.findViewById(R.id.listView1); 
    ArrayAdapter<String> adp = new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_multiple_choice,str); 
    lv.setAdapter(adp); 
    final boolean[] checkedItems = new boolean[str.length]; 
    alertDialog.setMultiChoiceItems(str, checkedItems, new DialogInterface.OnMultiChoiceClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which, boolean isChecked) { 
      // TODO Auto-generated method stub 

      int count = 0; 
      for (int i = 0; i < checkedItems.length; i++) { 
       // loop through the checkedItems array, if checkedItems 
       // increment count*/ 

       if (checkedItems[i]) { 

        count++; 

       } 
       if (count == 5) { 
        // if the number of checked items become 
        // four, set the last checkedItems item 'which' 
        // to false and uncheck the checkbox 
        checkedItems[which] = false; 
        ((AlertDialog) dialog).getListView().setItemChecked(which, false); 
        break; 
       } 

      } 

     } 
    }); 


    alertDialog.show(); 
} 
1
  1. Реализовать отмечаемые представление списка, как показано here.
  2. Держите Collection из элементов, которые были проверены в адаптере (путем внедрения setOnCheckedChangeListener для флажка, содержащегося в элементе списка, и добавьте его в эту коллекции каждый раз, когда элемент проверяется.
  3. Наконец, использовать размер этой коллекции, чтобы определить, что позволяет/запрещая флажок, чтобы быть нажата.
+0

У меня проблема со вторым шагом. Можете ли вы мне помочь? Где я могу реализовать setOnCheckedChaneListener? – user2200639

+0

Каждый элемент списка содержит флажок. Получите его в методе getView 'CheckBox chk = (CheckBox) result.findViewById (R.id.itemCheckBox);', а затем установите прослушиватель на флажке. – Jeshurun

+0

ok, у меня есть что-то вроде этого: \t \t 'CheckBox chk = (CheckBox) v.findViewById (R.id.itemCheckBox); \t \t chk.setOnCheckedChangeListener (новый OnCheckedChangeListener() { \t \t \t \t \t \t @Override \t \t \t общественного недействительными onCheckedChanged (CompoundButton buttonView, логическое IsChecked) { \t \t \t \t если (IsChecked) \t \t \t \t \t list.add (item.getId()); \t \t \t \t \t \t \t} \t \t}); ', но как я могу запрещая другие checkboxs быть нажата? – user2200639

Смежные вопросы