Android Studio и Kotlin: неразрешенная ссылка: контекст

#android #kotlin

#Android #kotlin

Вопрос:

Я перепробовал сотни способов решить эту проблему со ссылкой:

 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) я получаю неразрешенную ссылку: контекст, и я понятия не имею, почему.

Версия Android Studio: 3.3.2 Версия Kotlin: 1.3.21

Кто-нибудь может мне помочь?

Комментарии:

1. context: this недопустимый синтаксис. Если класс находится в Kotlin, вы можете сделать context = this . Если это написано на Java, вы не можете использовать явные имена

2. удалите контекст и просто используйте это.

3. Спасибо за ответ. Вы правы, я пытался сделать это таким образом. но я думал, что это не даст мне такого же результата. Итак, в Kotlin я должен избегать двоеточия в свойствах и вместо этого использовать знак равенства?

4. @Rybecki Вы можете использовать знак равенства, но вам не ОБЯЗАТЕЛЬНО 🙂 Я следую тому же руководству (PluralSight, приложения для Android с Kotlin, раздел 4, последняя демонстрация) и знаю, откуда вы пришли. Это один из интересных случаев, когда IDE (Android Studio) умнее нас 🙂 Когда вы вводите «this» (без «context: «), Android Studio просматривает определение ArrayAdapter и выясняет, что первым аргументом является context и может информировать вас об этом (в зависимости от ваших настроек). Следовательно, вы можете либо удалить «context: » (как сказал Райан), либо написать «context = this» (как сказала Зои).

Ответ №1:

У меня было похожее сообщение об ошибке, потому что я не импортировал Context . Если вы явно не импортировали Context , попробуйте добавить это в свой список импорта рядом с началом вашего Activity файла:

  import android.content.Context          
  

Ответ №2:

Столбец в 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")