Как снять отметку с элементов в AlertDialog (setMultiChoiceItems)?

Я хотел бы очистить выбранные элементы, когда общее число достигло трех выбранных элементов, я делаю следующее, но не работает …

AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(getResources().getText(R.string.escolhaArquivosBaixados)); builder.setMultiChoiceItems(items, selected, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { // int count = 0; for(int i = 1; i < selected.length; i++){ // if (selected[i]){ count++; } if (count == 3){ //enter here but nothing happens ((AlertDialog) dialog).getListView().setItemChecked(which, false); break; } } } }); 

Solutions Collecting From Web of "Как снять отметку с элементов в AlertDialog (setMultiChoiceItems)?"

Увидев ответ Jorgesys в этом вопросе, я понял, чего не хватает в моем коде, необходимо также изменить логический список.

  selected[which] = false; ((AlertDialog) dialog).getListView().setItemChecked(which, false); 

Первый индекс в массиве равен 0, а не 1. Таким образом:

 for(int i = 1; i < selected.length; i++){ // if (selected[i]){ count++; } 

Никогда не будет проверять первый элемент в булевом массиве. Вам нужно начать с i == 0. Я не знаю, сколько предметов в вашем списке. Но если у вас есть только 3 предмета,

 if (count == 3){ 

Никогда не будет правдой, потому что он будет проверять последние два в массиве. Также этот вызов:

 ((AlertDialog) dialog).getListView().setItemChecked(which, false); 

Только установит 1 пункт в списке, чтобы снять флажок. Это будет третий, который вы нажмете. Итак, первые два, которые вы нажмете, будут проверены и останутся проверенными. Затем, когда вы нажимаете на третий, он будет проверен на долю секунды, а затем снимите флажок. Это то, что вы пытаетесь сделать? Или вы хотите снять все три из них? Его не очень понятно, что вы пытаетесь сделать по вашему вопросу.

Если вы хотите использовать multicheckoption как единый вариант выбора, используйте этот код.

  String[] items = new String[]{"Most Funded (high - low)", "Most Funded (low - high)", "Newest first", "Funding Ask"}; boolean selected[] = new boolean[]{false, false, false, true}; private void showDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(getResources().getText(R.string.sortby)); builder.setMultiChoiceItems(items, selected, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { // for (int i = 0; i < selected.length; i++) { if (i == which) { selected[i]=true; ((AlertDialog) dialog).getListView().setItemChecked(i, true); } else { selected[i]=false; ((AlertDialog) dialog).getListView().setItemChecked(i, false); } } } }); builder.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { dialogInterface.dismiss(); } }); builder.show(); }