Kotlin-值参数上需要类型注解

svgewumm  于 2022-12-19  发布在  Kotlin
关注(0)|答案(1)|浏览(138)

因此,我不是新的编程,但新的Java和目前学习Kotlin通过谷歌提供的课程。我到达骰子辊应用程序,并决定做实践对您的挑战在每一届会议结束时在那里我必须滚动2骰子与1滚动按钮,但不能这样做。

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val rollButton: Button = findViewById(R.id.button)

        rollButton.setOnClickListener{ rollDice(dice1) };  **//Error**
        rollButton.setOnClickListener{ rollDice(dice2) };  **//Error**

    }
    private fun rollDice(dice: ImageView) {

        val myDice = Dice(6);
        val diceRoll: Int = myDice.roll();
        val diceImage: ImageView = findViewById(R.id.dice)  **//ERROR**
        diceImage.contentDescription = diceRoll.toString()

        val drawableResource = when (diceRoll) {
            1 -> R.drawable.dice_1
            2 -> R.drawable.dice_2
            3 -> R.drawable.dice_3
            4 -> R.drawable.dice_4
            5 -> R.drawable.dice_5
            else -> R.drawable.dice_6
        }
        diceImage.setImageResource(drawableResource)
        }}

class Dice(private val numSides: Int) {
    fun roll(): Int{
        return (1..numSides).random()
    }

}
bkhjykvo

bkhjykvo1#

您已经修改了rollDice函数以接受ImageView参数,因此可以删除此行:

val diceImage: ImageView = findViewById(R.id.dice)

并且可以更改设置图像的行,以使用传递给函数的参数(命名为dice):

dice.setImageResource(drawableResource)

当你调用这个函数时,你必须传递ImageView,所以你需要在传递之前创建变量来找到那些ImageView。另外,你一次只能设置一个click监听器。你需要在一个click监听器中调用rollDice函数两次。你尝试这样做的方式是,当你设置第二个click监听器时,第一个click监听器会被擦除。

val dice1: ImageView = findViewById(R.id.dice1)
val dice2: ImageView = findViewById(R.id.dice2)

rollButton.setOnClickListener{ 
    rollDice(dice1) 
    rollDice(dice2) 
}

相关问题