Android Studio和Kotlin:未解决的引用:context

6

我已经尝试了数百种方法来解决这个引用问题:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setSupportActionBar(toolbar)

        val dm = DataManager()
        val adapterCourses = ArrayAdapter<CourseInfo>(context:  this,
                    android.R.layout)

ArrayAdapter<CourseInfo>(context: this, android.R.layout) 中,我遇到了 未解决的引用: context 的问题,但我不知道为什么。

Android Studio版本:3.3.2 Kotlin版本:1.3.21

有人能帮我吗?


3
这不是有效的语法。如果这个类是用Kotlin写的,你可以使用context = this。如果是Java编写的,你不能使用显式名称。 - Zoe stands with Ukraine
2
Remove context and just use this. - Ryan Godlonton-Shaw
谢谢你的回答。你说得对,我尝试过这样做。但是我认为它不会给我相同的结果。 所以在 Kotlin 中,我应该避免在属性中使用冒号,而是使用等号吗? - Rybecki
2
@Rybecki,你可以使用等号,但不是必须的 :) 我正在跟随同一教程(PluralSight,Kotlin Android应用程序,第4节,最后一个演示),并且知道你的想法。这是一个有趣的案例,其中IDE(Android Studio)比我们更聪明:) 当您键入“this”(没有“context:”)时,Android Studio会查看ArrayAdapter的定义,并确定第一个参数是上下文,并可能通知您(取决于您的设置)。因此,您可以删除“context:”(如Ryan所说),也可以编写“context = this”(如Zoe所说)。 - Positive Navid
2个回答

7

我曾经因为没有导入Context而遇到过类似的错误信息。 如果你没有明确地导入Context,请尝试在Activity文件的开头附近将以下内容添加到你的导入列表中:

 import android.content.Context          

0

Kotlin中的列用于某些事情,但在传递命名参数时不使用。传递命名参数的语法是parameterName = parameterValue

当您在传递参数时编写context = this时,您只是引用所调用函数的context参数,明确表示this必须对应于该context参数。除非您想非常明确地表达,否则在这种情况下并没有什么用处。

使用命名参数的有用性在于处理可选参数或按任意顺序传递参数时。
例如:

// DECLARATION of function abc
fun abc(s: String = "", i: Int = 0)

// USAGE of function abc passing only an Int
abc(i = 314)

函数abc有两个参数,它们都有默认值。在这种情况下,如果您满意默认值,可以避免传递任何参数。 但是如果您只想传递i,则可以通过指定其名称来实现,就像示例中所做的那样。

同样,您可以选择无序传递参数,在这种情况下,您将执行:

abc(i = 314, s = "something")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接