我在编译
时收到Unresolved Reference错误:(42,26)未解析的引用:r1 错误:(42,36)未解析的参考:ds
onClick方法变量中的变量r1和ds显示为错误。 在kotlin中,所有varibales都是最终的。那么它怎么不接受它。 请建议以下是脚本
class MainActivity : AppCompatActivity(), View.OnClickListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val b1: Button = findViewById(R.id.add)
val a1: EditText = findViewById(R.id.opr1)
val a2: EditText = findViewById(R.id.opr2)
val d1: Int = (a1.getText().toString().toInt())
val d2: Int = (a2.getText().toString().toInt())
var r1: TextView = findViewById(R.id.res)
var ds :Int =d1+d2
}
override fun onClick(v: View?) {
when (v?.id) {
R.id.add -> r1.text= (ds).toString()
}
}
}
答案 0 :(得分:1)
ds
是局部变量,只能在函数onCreate()
中访问。如果你想总结EditText
的数字,你应该把你的加法逻辑放在onClick()
方法中:
override fun onClick(v: View) {
when (v.id) {
R.id.add -> {
val d1: Int = et1.text.toString().toInt()
val d2: Int = et2.text.toString().toInt()
val ds = d1 + d2
r1.text = ds.toString()
}
}
}
此外,您应该将r1
和其他视图引用声明为类成员,以便可以在Activity
类中访问它们,而不仅仅是onCreate()
。
答案 1 :(得分:0)
r1
是onCreate
中的局部变量,因此无法在此函数之外访问。
在函数之外声明它如下:
private lateinit var r1: TextView
像onCreate
一样分配它:
r1 = findViewById(R.id.res)
然后您可以按预期访问它:
r1.text= ds.toString()
同样的规则适用于您希望在onCreate
之外访问的其他变量。
onCreate
不是构造函数,因此r1
在此之前未初始化。但是你知道onCreate
是活动生命周期中调用的第一个东西,所以当你在这里初始化变量时它总是非空的。
否则你必须像这样声明变量:
private var r1: TextView?
并使用!!
运算符访问它,例如:
r1!!.setText(...)
答案 2 :(得分:0)
变量 ds 仅存在于第一个函数中。您必须在外面声明它才能从第二个访问它。