Ответ 1
Увидев ответ Jorgesys в этом question, я понял, чего не хватает в моем коде, для изменения булевского списка тоже необходимо.
selected[which] = false;
((AlertDialog) dialog).getListView().setItemChecked(which, false);
Я хотел бы очистить выбранные элементы, когда общее количество выбрано для трех элементов, я делаю следующее, но не работает...
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;
}
}
}
});
Увидев ответ Jorgesys в этом question, я понял, чего не хватает в моем коде, для изменения булевского списка тоже необходимо.
selected[which] = false;
((AlertDialog) dialog).getListView().setItemChecked(which, false);
Первый индекс в массиве равен 0, а не 1. Таким образом:
for(int i = 1; i < selected.length; i++){
//
if (selected[i]){
count++;
}
Никогда не будет проверять первый элемент в булевом массиве. Вам нужно начать с я == 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();
}