Actualmente, he creado el cambio de idioma dentro del cuadro de diálogo de alerta con setSingleChoiceItems , setPositiveButton y setNegativeButton . ¿Cómo evito el cambio de idioma si hago clic 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() } En este momento setPositiveButton funciona correctamente y he setCancelable en falso, entonces, ¿cómo puedo lograr setNegativeButton ? Gracias
No está realizando ninguna acción en el clic de botón negativo.
Por favor, haga lo siguiente.
.setNegativeButton(getString(R.string.button_no)) { dialogInterface, i-> dialogInterface.dismiss(); }Esto se debe a que siempre configura el idioma al seleccionar cada elemento en el siguiente código:
mBuilder.setSingleChoiceItems(listItems, -1) { dialogInterface, i -> when (i) { 0 -> { setLocale("en") } 1 -> { setLocale("zh") } }}Por lo tanto, debe configurar la configuración regional solo cuando haga clic en el botón positivo. Esto se puede lograr mediante el uso de una variable temporal para su configuración regional. Algo como esto:
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() }Nota : código aún no probado.