Kotlin/Android Studio-如何将变量从覆盖乐趣传递到应用程序的其余部分?
我环顾了一下四周,没有找到我的问题的好答案。在我的应用程序中,我有一个计时器。这个计时器在单击时停止,我想根据剩余时间计算分数。我可以使用“millisUntilFinished”来计算分数,但我不能在我的应用程序中重用分数变量。你能帮我找到正确/最好的方法吗?下面是我的代码:Kotlin/Android Studio-如何将变量从覆盖乐趣传递到应用程序的其余部分?,android,android-studio,variables,kotlin,global-variables,Android,Android Studio,Variables,Kotlin,Global Variables,我环顾了一下四周,没有找到我的问题的好答案。在我的应用程序中,我有一个计时器。这个计时器在单击时停止,我想根据剩余时间计算分数。我可以使用“millisUntilFinished”来计算分数,但我不能在我的应用程序中重用分数变量。你能帮我找到正确/最好的方法吗?下面是我的代码: var score: Long val timer = object : CountDownTimer(20000, 1000) { override fun onTick(millis
var score: Long
val timer = object : CountDownTimer(20000, 1000) {
override fun onTick(millisUntilFinished: Long) {
timer.setText("" + millisUntilFinished / 1000)
score = millisUntilFinished / 1000
}
override fun onFinish() {
timer.setText("0");
}
}
timer.start()
当我稍后尝试在我的应用程序中使用它时,我得到了一个“变量‘score’必须初始化”。我尝试了很多方法,但每次都无法重用在重写中初始化的变量
谢谢你的帮助 您可以将其定义为
lateinit var
,也可以对其进行初始化
lateinit var score: Long
val timer = object : CountDownTimer(20000, 1000) {
override fun onTick(millisUntilFinished: Long) {
timer.setText("" + millisUntilFinished / 1000)
score = millisUntilFinished / 1000
}
override fun onFinish() {
timer.setText("0");
}
}
timer.start()
请注意,lateinit
在类中而不是在函数中定义。
或者,您可以使用:
var score=0.toLong()
val timer = object : CountDownTimer(20000, 1000) {
override fun onTick(millisUntilFinished: Long) {
timer.setText("" + millisUntilFinished / 1000)
score = millisUntilFinished / 1000
}
override fun onFinish() {
timer.setText("0");
}
}
timer.start()
请格式化代码很可能是因为在您尝试访问分数之前,您的计时器没有勾选,所以分数从未初始化过。这段代码甚至不会编译,因为您也不会首先初始化score,所以不知道如何获得运行时异常……您不应该为score设置初始值吗
var score:Lang=0
左右?通常,您希望在编写的任何代码中避免使用全局变量。我不知道您的经验是什么,但您应该很快开始研究MVVM之类的设计模式,以了解如何在应用程序中移动数据。您现在也可以使用侦听器,如果您真的想拥有一个全局变量,那么看看静态变量和单例模式。但我要重申,使用它们通常是一个坏主意,除非你确切知道自己在做什么。@VadimCaen鉴于我们展示的代码数量很少,这是一个荒谬的建议。拥有类级别的状态变量是非常常见的——它们不太可能是真正的全局变量。你的建议与他的问题无关,实际上也不是基于发布的代码。