#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")