即使我已经将Val更改为Var Kotlin,也无法将Val重新分配错误

时间:2020-10-03 19:52:57

标签: android kotlin intellij-idea android-drawable var

我正在IntelliJ中使用Kotlin。

我有这段简短的代码

        val myLayoutView = v.findViewById(R.id.layout) as LinearLayout
        var myImageView = v.findViewById(R.id.image) as ImageView
        val myLabelView =v.findViewById(R.id.label) as TextView

        var app = getItem(position) as AppObject
        myLabelView.text = app.appName
        myImageView.drawable = app.appImage

为什么在世界上告诉我:

        myImageView.drawable = app.appImage

“不能重新分配Val”关于所提及的变量,已将val的任何实例完全更改为var。

为了确保甚至已经更改了其他类中具有相同名称的变量,甚至将类中的每个变量都更改为var,我仍然收到此错误。

它与drawable的性质有关吗?

我缺少什么或做错了什么才能得到此错误?我该如何解决?

谢谢!

2 个答案:

答案 0 :(得分:3)

根据Kotlin Properties and Fields documentationval属性是具有getter但没有setter的属性。 var属性同时具有getter和setter。

如果您查看ImageView,它有一个getDrawable(),但没有setDrawable()方法。 Kotlin会自动将Java类中的getter转换为属性,这就是为什么您完全可以使用myImageView.drawable的原因。但是,由于没有setDrawable()方法,所以这是val属性。

您需要使用setImageDrawable()之类的方法来设置图像。

答案 1 :(得分:2)

您在该声明中误解了var的含义。

“ var myImageView”表示可以更改“ var myImageView”的值。换句话说,您可以为其分配一个不同的ImageView。它不适用于内容。

一个更好的例子:

val list = mutableListOf(1, 2, 3)
var list2 = listOf(1, 2, 3)

list.add(5)            <----- Yes
list2.add(5)           <----- No

list = mutableListOf(3, 4, 5)   <----- No
list2 = mutableListOf(3, 4, 5)  <----- Yes

“列表”被定义为val,因此您不能替换它。但由于它是可变列表,因此您可以更改其内容

“ list2”被定义为var,因此您可以将其替换。但是,它是一个不可更改的列表,因此其内容无法更改。

相关问题