2015-08-23 3 views
1

У меня есть следующий код:Отключить 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, но что? И как мне это сделать?

+0

Я знаю, что это похоже на это: [Как отключить/включить диалог отрицательных положительных кнопок?] (Http://stackoverflow.com/questions/8238952/how-to-disable-enable-dialog-negative-positive- кнопки). Итак, ответы там несколько предлагают мне сделать слушателей для всех моих «CheckBox», но я действительно не знаю, сколько они. Или их идентификаторы, даже. Потому что я просто позволю 'AlertDialog.Builder' сделать это для меня. –

ответ

1

Для этого вам необходимо создать настраиваемый диалог. Чтобы узнать, как проверить эту ссылку. Click Here

Вы можете попробовать это.

Создайте логическое значение как true. Если установлен флажок, установите значение Boolean true false.

Затем, когда вы создаете диалог оповещения, просто проверьте, установлено ли значение Boolean как false или true. Если true, создайте кнопку «Да», еще не создайте кнопку «Да». Теперь проблема в том, что кнопка проверки находится внутри alertdialog, если я так прав.

Каждый раз, когда нажимается кнопка проверки, вы можете закрыть диалоговое окно оповещения и снова открыть его, если флажки уже отмечены галочкой и без кнопки «да». Это означает, что для ссылки отключена. Или в технических терминах setEnabled = "false;"

Конечно, это лагги и т. Д., Но это все, что я могу сделать. Извините

+0

Ссылка не работает. В любом случае, спасибо за ваше предложение. Я буду рассматривать это, если не найду другого пути. :) –

+0

Мне очень жаль. Проверьте ссылку сейчас. –

+0

LOL. Бадди, все в порядке. Прекратите говорить: «Извините». Вы заставляете меня звучать так, как будто я имею в виду. Опять же, спасибо. –