声明 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"
}
我是 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' 然后尝试启动它只是崩溃的应用程序。
所以我不确定为什么以及如何发生这种情况。这种方法可能是完全错误的吗?
您应该使用
全局声明您的 TextViewvar labelOutput: TextView? = null
然后在您的 onCreate
方法中初始化它:
labelOutput = findViewById(R.id.textVIewOutput)
您无法在 setContentView
调用设置当前布局之前初始化视图。
要使用您的 labelOutput
实例,只需将您的 outputSomething
函数编辑为
private fun outputSomething (){
labelOutput?.text = "something"
}