Android 有没有办法用if/when语句更改imageView资源

Android 有没有办法用if/when语句更改imageView资源,android,android-studio,kotlin,Android,Android Studio,Kotlin,我想制作一个这样的程序: 我尝试了很多东西,但不知道在if/when语句的括号中放什么 变量y=getResources().getIdentifier(“菜单”,“可绘制”,getPackageName()) }你在找这样的东西吗 string buttonSequense =""; buttonYes.setOnClickListener { buttonSequense +="yes"; setImage(); } buttonNo.setOnClickListener {

我想制作一个这样的程序:

我尝试了很多东西,但不知道在if/when语句的括号中放什么

变量y=getResources().getIdentifier(“菜单”,“可绘制”,getPackageName())


}你在找这样的东西吗

string buttonSequense ="";

buttonYes.setOnClickListener {
  buttonSequense +="yes";
  setImage();
}
buttonNo.setOnClickListener {
  buttonSequense +="no";
  setImage();
}
然后设置图像方法:

public void setImage(){
  if(buttonSequense.equals("yes")){
    imageView.setImageResource(R.drawable.door_inside)
  }else if(buttonSequense.equals("yesno")){
    imageView.setImageResource(R.drawable.door_back)
  }else if(buttonSequense.equals("yesnonoyesno"))
  //... and so on
}

看起来建立一张可绘制地图并使用它会更干净

import your.package.name.R.drawable.*
//...

data class Choice(val choice1: Int, val choice2: Int)

val choicesMap = mapOf(
     door1 to Choice(door_inside, door_back),
     door_inside to Choice(door_further_inside, door1),
     //etc.
 )
然后在应用时存储当前可绘制图形,并使用它进行选择

var currentImageDrawable = R.drawable.door1

//...

buttonYes.setOnClickListener {
  currentImageDrawable = choicesMap[currentImageDrawable].choice1
  imageView.setImageResource(currentImageDrawable)
}
buttonNo.setOnClickListener {
  currentImageDrawable = choicesMap[currentImageDrawable].choice2
  imageView.setImageResource(currentImageDrawable)
}

在kotlin中,开关的大小写与java类似。我想你误解了。请检查:看起来很好,但我有一些错误。1.未解析的引用:imageResource。第行:imageView.imageResource=currentImageDrawable 2。分类器“drawable”没有伴生对象。行中:val choicesMap=with(R.drawable){mapOf(使用
setImageResource()
而不是
imageResource=
。不确定Kotlin为什么不转换它。然后用(R.drawable){}删除
。我认为它可以节省一些重复,但没有意识到Java静态不会转换为伴随对象。相反,您可以将
import R.drawable.
放在文件的顶部,以避免反复键入
R.drawable
。确定第一个错误已修复。当我添加import R.drawable.*时,顶部显示R未被删除已解决引用问题。我如何修复此问题?或者您可以告诉我如何将其转换为伴随对象?我自己尝试过,但还不知道它们是如何工作的。谢谢。请在程序包名称前加上前缀R。很遗憾,Kotlin无法将Java静态成员转换为伴随对象。必须将!!添加到行:currentImageDrawable=ChoiceMap[currentImageDrawable]!!。选择1,程序正在运行!非常感谢您的帮助:)
var currentImageDrawable = R.drawable.door1

//...

buttonYes.setOnClickListener {
  currentImageDrawable = choicesMap[currentImageDrawable].choice1
  imageView.setImageResource(currentImageDrawable)
}
buttonNo.setOnClickListener {
  currentImageDrawable = choicesMap[currentImageDrawable].choice2
  imageView.setImageResource(currentImageDrawable)
}