未解决的参考使用Android的Kotlin
编译时我得到未解析的引用
错误:(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() } } }
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()
。
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(...)
变量ds只存在于第一个函数中。 你必须在外面声明才能从第二个访问它。