#android #kotlin
Вопрос:
Я только начал изучать Котлин и не знаю when
, как его правильно использовать. Когда число равно 1, тост есть, но изображение (второй 1
случай) не меняется. Есть ли способ сделать это с when
помощью ?
when (number){
1 -> Toast.makeText(applicationContext,"1",Toast.LENGTH_SHORT).show()
1 -> imgview.setImageResource(R.drawable.dice_1)
2 -> Toast.makeText(applicationContext,"SAD",Toast.LENGTH_SHORT).show()
2 -> imgview.setImageResource(R.drawable.dice_2)
}
Ответ №1:
Конечно, просто заключите каждый набор операторов в фигурные скобки:
when (number){
1 -> {
Toast.makeText(applicationContext,"1",Toast.LENGTH_SHORT).show()
imgview.setImageResource(R.drawable.dice_1)
}
2 -> {
Toast.makeText(applicationContext,"SAD",Toast.LENGTH_SHORT).show()
imgview.setImageResource(R.drawable.dice_2)
}
}
Ответ №2:
when
утверждение in Kotlin
аналогично switch
утверждению in Java
. Как только в инструкции будет найден соответствующий регистр when
, элемент управления вернется из инструкции.
Таким образом, в вашем коде выполняется первый 1
случай, и элемент управления возвращается из инструкции, поэтому он никогда не переходит ко второму 1
случаю. Я не знаю вашей цели для дублирования этих случаев вместо того, чтобы группировать их, как показано в приведенном ниже коде:
when (number){
1 -> {
Toast.makeText(applicationContext,"1",Toast.LENGTH_SHORT).show()
imgview.setImageResource(R.drawable.dice_1)
}
2 -> {
Toast.makeText(applicationContext,"SAD",Toast.LENGTH_SHORT).show()
imgview.setImageResource(R.drawable.dice_2)
}
}
Ответ №3:
when (number){
1 -> {
Toast.makeText(applicationContext,"1",Toast.LENGTH_SHORT).show()
imgview.setImageResource(R.drawable.dice_1)}
2 ->{ Toast.makeText(applicationContext,"SAD",Toast.LENGTH_SHORT).show()
imgview.setImageResource(R.drawable.dice_2) }
else->{
//if both fail to mach
}
}
Добавьте фигурные скобки для определения области действия.
Ответ №4:
when
ищет первое условие, которое соответствует, поэтому, как только вы попадете в первую 1
ветвь, он выполнит код, а затем выйдет из блока. Это не доходит до других — вы можете думать об этом как о большом if/else if/else if/else
блоке, где более поздние могут сработать только в том случае, если ничего не произошло до них.
Поэтому вам нужно выполнить весь свой код в первой ветке, которая соответствует, как показано в других ответах!