Подход, который я выбрал, состоял в том, чтобы объявить final Boolean []
для хранения состояния элементов, а затем, когда я вызвал метод setMultiChoiceItems
, я предоставил DialogInterface.OnMultiChoiceClickListener
, который устанавливает состояние для каждого элемента в этом массиве при его изменении , Затем, когда была нажата положительная кнопка, я мог обратиться к этому массиву из DialogInterface.OnClickListener
.
Так, например (скопировано и немного запутано из моего кода):
final int aIndex = 0;
final int bIndex = 1;
final int cIndex = 2;
final int dIndex = 3;
final CharSequence[] items = {
context.getString(R.string.string_share_include_a),
context.getString(R.string.string_share_include_b),
context.getString(R.string.string_share_include_c),
context.getString(R.string.string_share_include_d) };
final Boolean[] state = new Boolean[4];
state[aIndex] = true;
state[bIndex] = true;
state[cIndex] = true;
state[dIndex] = false;
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(R.string.string_share_dialog_title);
builder.setMultiChoiceItems(items, new boolean[] { true, true, true,
false }, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which,
boolean isChecked) {
state[which] = isChecked;
}
});
builder.setPositiveButton(R.string.string_share_ok,
new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Utilities.shareStuff(
state[aIndex],
state[bIndex],
state[cIndex],
state[dIndex]);
}
});