Это потому, что вы всегда устанавливаете язык при выборе каждого элемента в следующем коде:
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()
}
Примечание : код еще не проверен.