未解决的参考使用Kotlin for android

时间:2017-10-22 11:45:47

标签: android kotlin

我在编译

时收到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()

        }
    }
}

3 个答案:

答案 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)

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(...)

答案 2 :(得分:0)

变量 ds 仅存在于第一个函数中。您必须在外面声明它才能从第二个访问它。