А если этого кода нет внутри MainActivity, то к какому экземпляру MainActivityон подключен (и как)? К какому экземпляру вы хотите получить доступ this?
горячая клавиша
Рабочий код Java ссылается только на activity. This, так что статический? Я не уверен в этом.
Bal0r
Рабочий код Java тоже находится в отдельном файле?
yole
Как этот код называется, если не в , MainActivityно все еще литье thisв MainActivity? Может быть, в подклассе?
Марк Плано-Лесай,
Ответы:
239
Вы можете получить ссылку на свой MainActivityобъект в Kotlin, используя квалифицированныйthis . например:
classMyActivity:MainActivity(){
val builder =MaterialDialog.Builder(this@MyActivity)}
Как насчет фрагмента? Я ввел контекст во фрагмент (с @ActivityContextатрибутом), теперь мне нужна активность. Конечно, я знаю о getActivity()(Котлине activity) во фрагменте, но подходит ли второй способ или из-за того, что у меня есть контекст, лучше использовать его для доступа к активности?
Доктор Джеки
@ Доктор Джеки Я думаю, вы можете использовать актерский состав '(в контексте? YourActivity)'. Теперь вы можете получить доступ к своим методам активности
Джан Гомен,
@ siddarth-g, если у вас возникла проблема с неразрешенными ссылками, я рекомендую создать новый вопрос с MCVE, чтобы получить помощь.
mfulton26
@ mfulton26 это не проблема компиляции, это @ ActivityName не сработало для меня и в другом проекте.
@IgorGanapolsky измените ActivityName на ваше Activity name -_-
Grecha
1
Если вы вызываете Activity.this из внутреннего класса, вы должны поместить inner перед классом
classMyActivity:MainActivity(){// Call from class itself
val builder =MaterialDialog.Builder(this@MyActivity)
inner classInner{this@MyActivity// Call from the inner class }}
this as MainActivity
?MainActivity
, то к какому экземпляруMainActivity
он подключен (и как)? К какому экземпляру вы хотите получить доступthis
?MainActivity
но все еще литьеthis
вMainActivity
? Может быть, в подклассе?Ответы:
Вы можете получить ссылку на свой
MainActivity
объект в Kotlin, используя квалифицированныйthis
. например:источник
@ActivityContext
атрибутом), теперь мне нужна активность. Конечно, я знаю оgetActivity()
(Котлинеactivity
) во фрагменте, но подходит ли второй способ или из-за того, что у меня есть контекст, лучше использовать его для доступа к активности?Попробуйте вместо этого этот ярлык
источник
Если вы вызываете Activity.this из внутреннего класса, вы должны поместить inner перед классом
источник
Так же, как в java для получения контекста активности как MainActivtiy. Это, в kotlin вы получите контекст как этот @ MainActivity
источник
getActivity()
эквивалентthis@activity_name
в случае конструктора для materialDialogисточник
Вы можете получить объект деятельности вот так.
источник
В Kotlin вы должны использовать такой способ:
Например: вам следует использовать его, если вы хотите определить «Контекст» в MainActivity.kt
Зачем? Потому что в языке Котлин @ имеет значение "из", например:
Если вы хотите узнать больше, вы можете посетить веб-сайт языка Kotlin: Это выражение в Kotlin
@canerkaseler
источник