Android - Как реализовать список как модальное диалоговое окно/всплывающее окно

В моем приложении для Android, когда пользователь нажимает кнопку, я хочу, чтобы поле со списком отображалось в виде модального диалогового окна, точно так же, как работает Spinner, за исключением того, что в поле со списком также можно выбрать несколько вариантов. Я попытался использовать ListView, как описано в руководстве по Android hello-listview (http://developer.android.com/resources/tutorials/views/hello-listview.html). К сожалению, похоже, это не работает так, как я ожидал. Он не отображается как модальное диалоговое окно, как Spinner. Я попытался посмотреть, что делает браузер Android, когда нужно отобразить список. Я перешел на страницу www.functionx.com/html/lesson14.htm в браузере на своем Android-устройстве и увидел следующее поведение (и это именно то поведение, которое я хочу видеть в своем приложении):

Когда раскрывающийся список/ при нажатии на поле со списком в HTML появляется счетчик, как показано на изображении здесь:
http://img842.imageshack.us/img842/803/htmlcombobox.png
При щелчке по одному списку выбора снова появляется счетчик, как показано здесь:
http://img13.imageshack.us/img13/3355/listboxsingle.png
А когда при щелчке по списку с множественным выбором в диалоговом окне появляется счетчик/список с множественным выбором, как показано здесь:
http://img835.imageshack.us/img835/711/listboxmulti.png
Итак, мои вопросы:

  1. Что это за виджет (на последнем изображении выше), который позволяет множественный выбор в модальном диалоге. Я уверен, что это должен быть компонент, уже доступный на платформе Android, поскольку он отображается в браузере.
  2. Даже Spinners (на первых двух изображениях) в браузере выглядят иначе, чем Spinner по умолчанию, который я вижу в своем приложении. Будет ли браузер применять пользовательские скины/цвета к фону и тексту отображаемых счетчиков?

person Beta    schedule 23.03.2011    source источник
comment
Не обращайте внимания на второй вопрос. Мое приложение создано для более старой версии, чем ОС, установленная на моем устройстве. Этим и объясняется разный вид спиннеров.   -  person Beta    schedule 24.03.2011


Ответы (2)


Проверьте пример проекта ApiDemos, Активность AlertDialogSamples. Есть кнопка с надписью «Повторить будильник», которая вызывает модальное диалоговое окно со списком множественного выбора.

В любом случае лучше всего начать с AlertDialog.Builder.

person adamp    schedule 23.03.2011

Вот код, если кому интересно:

new AlertDialog.Builder(this)
            .setMultiChoiceItems(R.array.select_dialog_items,
                    new boolean[]{false, true, false, true, false, false, false},
                    new DialogInterface.OnMultiChoiceClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton,
                                boolean isChecked) {

                            /* User clicked on a check box do some stuff */
                        }
                    })
            .setPositiveButton(R.string.alert_dialog_ok,
                    new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {

                    /* User clicked Yes so do some stuff */
                }
            })
            .setNegativeButton(R.string.alert_dialog_cancel,
                    new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {

                    /* User clicked No so do some stuff */
                }
            })
           .show();
person Beta    schedule 25.03.2011