Android alerttdialog Как запретить отрицательную кнопку подтвердить действие, как только я выбрал элемент из элементов с одним выбором - PullRequest
0 голосов
/ 12 февраля 2019

В настоящее время я создал язык изменения в диалоге предупреждений с помощью setSingleChoiceItems, setPositiveButton и setNegativeButton.Как предотвратить изменение языка, если щелкнуть setNegativeButton?

private fun showChangeLanguageDialog() {

    val listItems = arrayOf(getString(R.string.english), getString(R.string.chinese))
    val mBuilder = AlertDialog.Builder(this@LoginActivity)
    mBuilder.setTitle(getString(R.string.choose_language))
    mBuilder.setCancelable(false)
    mBuilder.setSingleChoiceItems(listItems, -1) { dialogInterface, i ->

        when (i) {
            0 -> {
                setLocale("en")
            }
            1 -> {
                setLocale("zh")
            }

        }}.setPositiveButton(getString(R.string.button_ok)) { dialogInterface, i ->

            recreate()
            dialogInterface.dismiss()

        }.setNegativeButton(getString(R.string.button_no)) { dialogInterface, i -> }

    val mDialog = mBuilder.create()
    mDialog.show()
}

Сейчас setPositiveButton работает правильно, и у меня setCancelable в false, так как я могу добиться setNegativeButton?Спасибо

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

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

mBuilder.setSingleChoiceItems(listItems, -1) { dialogInterface, i ->

    when (i) {
        0 -> {
            setLocale("en")
        }
        1 -> {
            setLocale("zh")
        }

    }}

Таким образом, вы должны устанавливать локаль только при нажатии положительной кнопки.Это может быть достигнуто с помощью временной переменной для вашей локали.Примерно так:

private fun showChangeLanguageDialog() {
    ...

    val temporaryLocale = ""

    mBuilder.setSingleChoiceItems(listItems, -1) { dialogInterface, i ->

        when (i) {
            0 -> {
                temporaryLocale = "en"
            }
            1 -> {
                temporaryLocale = "zh"
            }

        }}.setPositiveButton(getString(R.string.button_ok)) { dialogInterface, i ->

            setLocale(temporaryLocale)
            recreate()
            dialogInterface.dismiss()

        }.setNegativeButton(getString(R.string.button_no)) { dialogInterface, i -> }

    val mDialog = mBuilder.create()
    mDialog.show()
}

Примечание : код еще не проверен.

0 голосов
/ 12 февраля 2019

Вы не выполняете никаких действий при нажатии отрицательной кнопки.

Пожалуйста, сделайте, как показано ниже.

.setNegativeButton(getString(R.string.button_no)) { dialogInterface, i->   
 dialogInterface.dismiss(); 
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...