android - 我有一个代码,其中一个 lateinit 变量在它被调用后被初始化,我不知道如何
问题描述
当我跟进使用 Kotlin 开发 Android 应用程序的 udacity 课程时,我发现讲师制作了一个 lateinit 变量lateinit var diceImage: ImageView
,因为她稍后会在调用它之前对其进行初始化
*在 rollDice()函数中调用了 lateinit 变量,但该变量是在 setOnClickListner 中调用函数后初始化
rollButton.setOnClickListener {
rollDice()
}
diceImage = findViewById(R.id.dice_Image)
您可以在下面找到完整的代码
package com.example.diceroller
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import kotlin.random.Random
class MainActivity : AppCompatActivity() {
private var rollNumber:Int = 0
lateinit var diceImage: ImageView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val rollButton: Button = findViewById(R.id.roll_Button)
rollButton.setOnClickListener {
rollDice()
}
diceImage = findViewById(R.id.dice_Image)
}
fun rollDice() {
val diceImage: ImageView = findViewById(R.id.dice_Image)
var randomInt: Int
do {
randomInt = Random.nextInt(6) + 1
} while (randomInt == rollNumber)
rollNumber = randomInt
when (rollNumber) {
1 -> diceImage.setImageResource(R.drawable.dice_1)
2 -> diceImage.setImageResource(R.drawable.dice_2)
3 -> diceImage.setImageResource(R.drawable.dice_3)
4 -> diceImage.setImageResource(R.drawable.dice_4)
5 -> diceImage.setImageResource(R.drawable.dice_5)
else -> diceImage.setImageResource(R.drawable.dice_6)
}
}
}
由于我是android开发的新手,我不知道在roleDice()函数中调用它后她是如何初始化它的
谁能帮我解决这个问题?.... 不应该在 setOnClickListner 之前调用它吗?
感谢您的帮助!
解决方案
setOnClickListener
只需注册一个回调 lambda,只要rollButton
单击 ,就会调用它,调用setOnClickListener
不会立即调用rollDice()
。该onCreate()
方法在 的生命周期的早期被调用AppCompatActivity
,因此您的用户将无法diceImage = findViewById(R.id.dice_Image)
在行运行之前点击按钮,因此这是非常安全的代码。
推荐阅读
- r - 使用循环或应用根据条件仅覆盖数据框中变量的某些值
- bash - 使用 samtools 提取两个伴侣都未映射的未映射读取?
- php - 如何直接在控制台中运行 php 命令?
- javascript - 使用“beforeunload”/“unload”事件监听器关闭浏览器后使用 Fetch 发送 POST 请求不起作用
- kotlin - Kotlin 泛型中列表和可变列表的区别
- amazon-web-services - 自动发现 ASG:InvalidClientTokenId:
- dymola - 在 Dymola 中模拟后的数据后处理
- windows - 如何将参数传递给远程PowerShell脚本?
- python - Python - 正则表达式
- javascript - nodejs,调用方法,输出日志流