У меня есть следующий код:Отключить AlertDialog PositiveButton Если нет CheckBox не проверено
final AlertDialog.Builder builder = new AlertDialog.Builder(Activity.this);
builder.setTitle(R.string.str_dbox_remove_plant_title);
final HashMap<String, Integer> stuff = myCollection.getListOfStuffWithLocation();
final CharSequence[] items = stuff.keySet().toArray(new CharSequence[stuff.size()]);
final List<Integer> indexesOfSelectedStuff = new ArrayList<Integer>();
builder.setMultiChoiceItems(items, null, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (isChecked)
indexesOfSelectedStuff.add(stuff.get(items[which].toString()));
else if (indexesOfSelectedStuff.contains(stuff.get(items[which].toString())))
indexesOfSelectedStuff.remove(which);
}
});
builder.setPositiveButton(R.string.str_dbox_remove_stuff_ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
for (int i = 0; i < indexesOfSelectedStuff.size(); i++) {
myCollection.removeStuff(i);
}
}
});
builder.setNegativeButton(R.string.str_dbox_remove_stuff_cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.setCancelable(false); // so as to prevent the back button from closing the dialog box
final AlertDialog alert = builder.create();
alert.setCanceledOnTouchOutside(false);
alert.getButton(DialogInterface.BUTTON_POSITIVE).setEnabled(false); // by default, disable OK button
alert.show();
У меня есть AlertDialog
с некоторыми CheckBox
х годов, и я хотел бы, чтобы отключить PositiveButton
до тех пор, пока не какой-либо есть CheckBox
es отмечены галочкой.
У меня есть List
называется indexesOfSelectedStuff
и вы могли бы сказать, что в некотором роде, используя свой метод size()
даст мне представление о том, сколько CheckBoxes
выбраны. Однако я не уверен, где его разместить или как ссылаться на PositiveButton
внутри строителя. Я хотел поставить его на методе onClick
(как определено в OnMultipleChoiceClickListener()
), например так:
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (isChecked)
indexesOfSelectedStuff.add(stuff.get(items[which].toString()));
else if (indexesOfSelectedStuff.contains(stuff.get(items[which].toString())))
indexesOfSelectedStuff.remove(which);
if (indexesOfSelectedStuff.size() == 0) {
// disable button
// but problem is, I don't know how to reference the POSITIVE_BUTTON
}
else {
// enable button
}
}
Я знаю, что есть высокая вероятность того, что я не могу вставить его там. И что мне придется делать проверки после создания AlertDialog
. Но если это так, что бы вы рекомендовали мне использовать? Я думаю о Listener
s, но что? И как мне это сделать?
Я знаю, что это похоже на это: [Как отключить/включить диалог отрицательных положительных кнопок?] (Http://stackoverflow.com/questions/8238952/how-to-disable-enable-dialog-negative-positive- кнопки). Итак, ответы там несколько предлагают мне сделать слушателей для всех моих «CheckBox», но я действительно не знаю, сколько они. Или их идентификаторы, даже. Потому что я просто позволю 'AlertDialog.Builder' сделать это для меня. –