Kotlin'de “Activity.this” e nasıl erişilir?


130

Şu Java kodum var:

MaterialDialog builder = new MaterialDialog.Builder(MainActivity.this)

MainActivity nesnesini Kotlin'de almak istiyorum. Otomatik dönüştürme saatinde kesiliyor MainActivity.this.


Belki this as MainActivity?
Marc Plano-Lesay

1
Ve eğer bu kod içeride değilse MainActivity, o zaman hangi örneğine MainActivity(ve nasıl) bağlı? Hangi örneğe erişmek istiyorsunuz this?
kısayol tuşu

Çalışan Java kodu yalnızca activity.this'e başvurur, yani statik bir kod mu? Emin değilim tho.
Bal0r

Çalışan Java kodu da tamamen ayrı bir dosyada mı?
yole

Nasıl bu kod değilse de, denir MainActivityama yine döküm thisiçin MainActivity? Bir alt sınıfta belki?
Marc Plano-Lesay

Yanıtlar:


239

NitelikliMainActivity kullanarak Kotlin'deki nesnenize referans alabilirsiniz . Örneğin:this

class MyActivity : MainActivity() {
    val builder = MaterialDialog.Builder(this@MyActivity)
}

1
Fragment nasıl? İçeriği Parçaya ( @ActivityContextöznitelik ile) enjekte ettim , şimdi Aktiviteye ihtiyacım var. Elbette, getActivity()Fragmanda (Kotlin activity) hakkında bilgim var , ancak ikinci yol tamam mı yoksa Bağlamım var, aktiviteye erişmek için onu kullanmak daha mı iyi?
Dr.jacky

@ Dr.jacky Sanırım '(bağlam olarak? YourActivity)' oyuncu kadrosunu yapabilirsin. Artık aktivite yöntemlerine erişebilirsin
Gian Gomen

@ siddarth-g çözülmemiş referanslarla ilgili bir sorununuz varsa, yardım almak için bir MCVE ile yeni bir soru oluşturmanızı öneririm .
mfulton26

@ mfulton26 derleme sorunu değil, bu @ ActivityName benim için başka bir projede de çalışmadı.
Siddarth G


1

Activity.this'i bir iç sınıftan çağırıyorsanız , sınıfın önüne yazmanız gerekir

class MyActivity : MainActivity() {
    // Call from class itself
    val builder = MaterialDialog.Builder(this@MyActivity) 

    inner class Inner {
        this@MyActivity // Call from the inner class 
    }
}

@Allen haklısın, iç sınıftaki Aktiviteye erişmek için iç anahtar kelime gerekli
droidev

0

AnaActivtiy.this olarak aktivite bağlamını elde etmek için java'da yaptığınız gibi, kotlin'de şu @ MainActivity


bu yorumları ne için ekliyorsunuz? Çözümlenmiş bir referans verebilir misiniz? Bize yardımcı olacak, böylece bir dahaki sefere onu takip edeceğiz
The Bala

0

getActivity()eşdeğeri this@activity_name malzeme için oluşturucu durumunda

materialDialog = MaterialDialog.Builder(this)

0

Bunun gibi faaliyet nesnesini elde edebilirsiniz.

class DemoActivity : MainActivity() {
    val builder = MaterialDialog.Builder(this@DemoActivity)
}

0

Kotlin'de şu şekilde kullanmanız gerekir:

Bu @ ActivityName

Örneğin: MainActivity.kt içinde "Bağlam" tanımlamak istiyorsanız kullanmalısınız.

var mContext:Context = this@MainActivity

Neden? Çünkü Kotlin dilinde @, aşağıdaki gibi "of" anlamına gelir:

val a = this@A // A's this

Daha fazla bilgi edinmek isterseniz Kotlin Language web sitesine bakabilirsiniz: Kotlin'de Bu İfade

@canerkaseler

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.