声明 findViewById 'global'



我对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"
}

最新更新