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 iç 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.