声明 findViewById 'global'

declare findViewById 'global'

我是 android 使用 Kotlin 进行开发的新手,我想在我的程序开始时声明 Buttons 和 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)”移动到“override fun onCreate”上方使其成为 'global' 然后尝试启动它只是崩溃的应用程序。

所以我不确定为什么以及如何发生这种情况。这种方法可能是完全错误的吗?

您应该使用

全局声明您的 TextView
var labelOutput: TextView? = null

然后在您的 onCreate 方法中初始化它:

labelOutput = findViewById(R.id.textVIewOutput)

您无法在 setContentView 调用设置当前布局之前初始化视图。

要使用您的 labelOutput 实例,只需将您的 outputSomething 函数编辑为

private fun outputSomething (){
    labelOutput?.text = "something"
}