未解决的参考使用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()

r1onCreate一个局部变量,所以不能在这个函数之外访问。

在函数之外声明它,如下所示:

 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只存在于第一个函数中。 你必须在外面声明才能从第二个访问它。