我对Kotlin的android开发很陌生,我想在我的程序开始时声明按钮和TextViews。这样我就可以在整个程序中使用它们。
现在下面的代码像预期的那样工作,但是正如我们所看到的,我必须使用它两次,我想避免这种情况。
var labelOutput: TextView = findViewById(R.id.textVIewOutput)
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var useButton: Button = findViewById(R.id.buButton1)
var useButton2: Button = findViewById(R.id.buButton2)
var labelOutput: TextView = findViewById(R.id.textVIewOutput)
useButton.setOnClickListener{
labelOutput.setText(calc(3.0, 4.0).toString())
}
useButton2.setOnClickListener{
outputSomething()
}
}
private fun calc (a:Double, b:Double): Double {
val result = a + b
return result
}
private fun outputSomething (){
var labelOutput: TextView = findViewById(R.id.textVIewOutput)
labelOutput.text = "something"
}
然而,如果我移动">var labelOutput: TextView = findViewById(R.id.textVIewOutput)";>>";如果把它设为"全局",然后尝试启动应用程序,它就会崩溃。
所以我不确定为什么和如何发生这种情况。这种方法是完全错误的吗?
你应该全局声明你的TextView
var labelOutput: TextView? = null
然后在onCreate
方法中初始化它:
labelOutput = findViewById(R.id.textVIewOutput)
在setContentView
调用设置当前布局之前,不能初始化视图。
要使用labelOutput
实例,只需将outputSomething
函数编辑为
private fun outputSomething (){
labelOutput?.text = "something"
}