AlertDialog с селектором

Я пытаюсь сделать диалог с селектором, который выглядит точно так:

AlertDialog с селектором

Я пытался использовать AlertDialog, который содержит ListView, но это дает уродливую черную границу между ListView и нижней серой областью. Я мог бы использовать обычный диалог, но я не хочу создавать нижнюю серую область вручную.

Я знаю, что могу подклассировать AlertDialog, но тогда мне также нужно будет создать подкласс Builder, и в итоге получается много кода для такой маленькой детали. Есть ли какой-нибудь аккуратный способ сделать это?

Ваше здоровье,


person pgsandstrom    schedule 22.12.2011    source источник


Ответы (2)


Используйте построитель диалогов предупреждений, у него есть для этого опции. Краткий пример:

AlertDialog.Builder adb = new AlertDialog.Builder(this);
CharSequence items[] = new CharSequence[] {"First", "Second", "Third"};
adb.setSingleChoiceItems(items, 0, new OnClickListener() {

        @Override
        public void onClick(DialogInterface d, int n) {
            // ...
        }

});
adb.setNegativeButton("Cancel", null);
adb.setTitle("Which one?");
adb.show();

См. документ по диалоговым окнам, раздел Добавление списка< /сильный>.

person Community    schedule 22.12.2011
comment
Я предлагаю вам сделать это так: adb.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() - person Abdulaziz Noor; 27.04.2015
comment
@AbdulazizNoor Почему? - person Jaec; 03.06.2016
comment
@Jaec действительно забыл, почему лоооол - person Abdulaziz Noor; 08.06.2016
comment
если вы дадите -1, ни один из элементов не будет выбран в начале. - person Muzaffer; 16.06.2016

Вы должны использовать следующий код для выбора одного элемента. Это рабочий код

CharSequence colors[] = new CharSequence[]{"View PDF", "Reduce Size", "Delete PDF", "Share PDF"};

            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setTitle("Select Option");
            builder.setItems(colors, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Log.e("value is", "" + which);
                    switch (which) {
                        case 0:
                            break;
                        case 1:
                            break;
                        case 2:
                            break;
                        case 3:
                            break;
                    }
                }
            });
            builder.show();
person SANJAY GUPTA    schedule 23.11.2016