Как сделать элементы диалога предупреждений?

Я хочу создать диалоговые элементы предупреждений. Вот мой код.

val colors = arrayOf("Red","Green","Blue")
        val builder = AlertDialog.Builder(this)

        builder.setTitle("Pick a color")
        builder.setItems(colors) {_,_ ->
            Toast.makeText(this,"Red Color",Toast.LENGTH_LONG).show()
            Toast.makeText(this,"Green Color",Toast.LENGTH_LONG).show()
            Toast.makeText(this,"Blue Color",Toast.LENGTH_LONG).show()
        }
        builder.show()
    }
}

В результате появится диалоговое окно с тремя вариантами выбора: красный, зеленый и синий. Но проблема в том, что если я нажму, например, на красный цвет, он покажет три тоста, если я нажму на синий/зеленый цвет, он покажет то же самое. Итак, как я могу показать конкретный тост при выборе определенного цвета?


person Community    schedule 27.09.2018    source источник


Ответы (3)


AlertDialog.Builder(this)
                .setItems(arrayOf("RED", "GREEN", "BLUE")) { _, pos ->
                    when (pos) {
                        0 -> {
                            Toast.makeText(this@MainActivity, "Red selected", Toast.LENGTH_SHORT).show()
                        }
                        1 -> {
                            Toast.makeText(this@MainActivity, "Green selected", Toast.LENGTH_SHORT).show()
                        }
                        2 -> {
                            Toast.makeText(this@MainActivity, "Blue selected", Toast.LENGTH_SHORT).show()
                        }
                        else -> {
                            Toast.makeText(this@MainActivity, "Nothing selected", Toast.LENGTH_SHORT).show()
                        }
                    }
                }
                .show()

Вы можете поместить код внутри блока.

person Sanket Naik    schedule 27.09.2018

 builder.setItems(colors) { dialog, position -> 
        Toast.makeText(this,colors[position],Toast.LENGTH_LONG).show() 
    }

вы можете использовать аргумент позиции, чтобы получить желаемый цвет.

person Angel Koh    schedule 27.09.2018
comment
Спасибо за ваш ответ. Это работает, но что, если я хочу что-то сделать вместо Toast. - person ; 27.09.2018
comment
просто замените оператор всплывающего уведомления на метод для выполнения той функциональности, которую вы хотите достичь. - person Angel Koh; 28.09.2018

Alert Dialog предоставить три кнопки
1. setPositiveButton
2. setNegativeButton
3. setNeutralButton

Вы можете создать часть прослушивателя каждого отдельно.

builder.setPositiveButton("RED"){dialog, which ->
                // Do something when user press the positive button
            }

            // Display a negative button on alert dialog
builder.setNegativeButton("GREEN"){dialog,which ->
                // Do something when user press the negative button
            }

            // Display a neutral button on alert dialog
builder.setNeutralButton("BLUE"){_,_ ->
                // Do something when user press the neutral button
            }
person Akshay Nandwana    schedule 27.09.2018
comment
Спасибо за ваш ответ, но я хочу установить элементы для прослушивания щелчка. Я имею в виду, если пользователь нажимает на красный, чтобы появился тост и сказал красный цвет. - person ; 27.09.2018
comment
Что делать, если цветов больше 3? - person Sanket Naik; 19.03.2019