Android alertdialog 如何在我从单选项目中选择项目后防止否定按钮确认操作

标签 android kotlin

目前,我已经使用 setSingleChoiceItemssetPositiveButtonsetNegativeButton 在警报对话框中创建了更改语言。如果单击 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?谢谢

最佳答案

这是因为您总是在选择以下代码中的每个项目时设置语言:

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()
}

注意:代码尚未测试。

关于Android alertdialog 如何在我从单选项目中选择项目后防止否定按钮确认操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54643011/

相关文章:

android - 调用没有任何值的绑定(bind)适配器

Android ViewPager 和 TabLayout 运行不快

javascript - WebViewClient onPageFinished 从未调用过

android - 将 Intent 从广播接收器发送到android中正在运行的服务

android - 将 PhoneGap Build App 部署到 Google Play 商店 : Multiple Keys?

android - Android Studio-Kotlin Int函数转换为字符串

java - Android Material TextInputLayout endIcon 截断 MaterialAutoCompleteTextView 中的文字

android - 在 Android Studio 中为 Kotlin 模块配置 "build.gradle"

java - Android 通知振动不起作用

android - SparseArray 错误 : Call requires API level S