Как получить проверенные элементы из элемента с несколькими вариантами выбора в Alert.Builder? - PullRequest
5 голосов
/ 28 августа 2011

Есть ли способ получить некоторую информацию о проверенных элементах в следующем Alert.Builder?Мне нужно сохранить некоторые логические значения в SharedPreferences, когда кто-то нажмет кнопку «позитив».Эти логические значения зависят от выбора, сделанного пользователем в предупреждении.Как я могу получить их?

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        final SharedPreferences preferences = getSharedPreferences("type_settings", MODE_PRIVATE);

        boolean[] selectedTypes = getSelectedTypes(preferences);

        builder.setIcon(R.drawable.menu_type)
                .setTitle(R.string.list_dialog_title)
                .setMultiChoiceItems(R.array.select_type_items, selectedTypes,
                        new DialogInterface.OnMultiChoiceClickListener() {
                            public void onClick(DialogInterface dialog, int whichButton, boolean isChecked) {
                            }
                        })
                .setPositiveButton(R.string.types_save, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        SharedPreferences.Editor prefEditor = preferences.edit();
                    }
                })
                .setNegativeButton(R.string.types_cancel, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        dialog.cancel();
                    }
                })
                .create();
        builder.show();

Ответы [ 3 ]

9 голосов
/ 28 августа 2011

Вы можете использовать getCheckedItemIds() или getCheckedItemPositions (), чтобы получить список отмеченных элементов из списка.Вы должны использовать AlertDialog.getListView(), чтобы сначала получить список диалогов.

mAlert.getListView().getCheckedItemPositions ();
2 голосов
/ 28 августа 2011

Мне удалось каким-то образом решить проблему, но я не знаю, хорошая ли это практика. Вот код:

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        final SharedPreferences preferences = getSharedPreferences("type_settings", MODE_PRIVATE);

        final String[] availableTypes = getResources().getStringArray(R.array.select_type_items);
        final boolean[] selectedTypes = getSelectedTypes(preferences, availableTypes);

        builder.setIcon(R.drawable.menu_type)
                .setTitle(R.string.list_dialog_title)
                .setMultiChoiceItems(R.array.select_type_items, selectedTypes,
                        new DialogInterface.OnMultiChoiceClickListener() {
                            public void onClick(DialogInterface dialog, int whichButton, boolean isChecked) {
                                selectedTypes[whichButton] = isChecked;
                            }
                        })
                .setPositiveButton(R.string.types_save, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        SharedPreferences.Editor prefEditor = preferences.edit();
                        saveSelectedTypes(prefEditor, availableTypes, selectedTypes);
                    }
                })
                .setNegativeButton(R.string.types_cancel, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        dialog.cancel();
                    }
                })
                .create();
        builder.show();
0 голосов
/ 29 мая 2013

Для повышения эффективности хранения вы можете преобразовать логический массив в целое число, прежде чем сохранять его в качестве предпочтения. Но будьте осторожны, логический массив, который инициализирует список AlertDialog, имеет обратный порядок значений логического массива из AlertDialog. (Кажется, что это последовательное изменение: происходит в ОС 2.3.6 и 4.2.2 ... Я не проверял никаких других версий.)

...