Как получить все выбранные индексы в AlertDialog multiChoiceItems - PullRequest
3 голосов
/ 27 июля 2011

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

Вот где я до ...

dialog.setMultiChoiceItems(list, null, null);
dialog.setPositiveButton("Okay", null);

РЕЗЮМЕ: Как я могу получить все проверенные индексы из AlertDialog?

1 Ответ

8 голосов
/ 27 июля 2011

Подход, который я выбрал, состоял в том, чтобы объявить 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]);
                }
            });
...