Wie greife ich in Kotlin auf "Activity.this" zu?

128

Ich habe diesen Java-Code:

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

Ich möchte das MainActivity-Objekt in Kotlin erhalten. Die automatische Konvertierung wird bei unterbrochen MainActivity.this.

Bal0r
quelle
Vielleicht this as MainActivity?
Marc Plano-Lesay
1
Und wenn dieser Code nicht enthalten ist MainActivity, mit welcher Instanz MainActivityist er dann verbunden (und wie)? Auf welche Instanz möchten Sie zugreifen this?
Hotkey
Der funktionierende Java-Code verweist nur auf die Aktivität. Dies ist also eine statische? Ich bin mir nicht sicher.
Bal0r
Befindet sich der funktionierende Java-Code auch in einer vollständig separaten Datei?
Yole
Wie wird dieser Code aufgerufen, wenn nicht in , MainActivityaber immer noch Gießen thiszu MainActivity? In einer Unterklasse vielleicht?
Marc Plano-Lesay

Antworten:

236

Sie können einen Verweis auf Ihr MainActivityObjekt in Kotlin erhalten, indem Sie einen qualifizierten verwendenthis . z.B:

class MyActivity : MainActivity() {
    val builder = MaterialDialog.Builder(this@MyActivity)
}
mfulton26
quelle
1
Wie wäre es mit Fragment? Ich habe Context in Fragment (mit @ActivityContextAttribut) eingefügt, jetzt brauche ich Aktivität. Natürlich weiß ich über getActivity()(Kotlin activity) im Fragment Bescheid , aber ist der zweite Weg in Ordnung oder weil ich Kontext habe, ist es besser, ihn für den Zugriff auf die Aktivität zu verwenden?
Dr. Jacky
@ Dr.jacky Ich denke du kannst '(Kontext als? YourActivity)' besetzen. Jetzt können Sie auf Ihre Aktivitätsmethoden zugreifen
Gian Gomen
@ siddarth-g Wenn Sie ein Problem mit ungelösten Referenzen haben, empfehle ich, eine neue Frage mit einem MCVE zu erstellen , um Hilfe zu erhalten.
mfulton26
@ mfulton26 Es ist kein Kompilierungsproblem. Dieser @ ActivityName hat bei mir auch in einem anderen Projekt nicht funktioniert.
Siddarth G
18

Versuchen Sie stattdessen dieses Etikett

this@YourActivityName
Der Bala
quelle
1
unresolevd Referenz
Siddarth G
Es wird nicht kompiliert
IgorGanapolsky
2
@IgorGanapolsky ändere den Aktivitätsnamen in deinen Aktivitätsnamen -_-
Grecha
1

Wenn Sie Activity.this aus einer inneren Klasse aufrufen, müssen Sie inner vor die Klasse stellen

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

    inner class Inner {
        this@MyActivity // Call from the inner class 
    }
}
Allen
quelle
@Allen Sie sind richtig, inneres Schlüsselwort ist erforderlich, um auf die Aktivität innerhalb der inneren Klasse
zuzugreifen
0

Genau wie Sie es in Java tun, um den Kontext der Aktivität als MainActivtiy.this abzurufen, erhalten Sie in kotlin den Kontext als this @ MainActivity

Shivam Yadav
quelle
Fügen Sie diese Kommentare für was hinzu? Können Sie eine entschlossene Referenz geben? Es wird uns hilfreich sein, damit wir es ab dem nächsten Mal verfolgen können
The Bala
0

getActivity()Äquivalent ist this@activity_name im Fall des Builders für materialDialog

materialDialog = MaterialDialog.Builder(this)
Mechadroid
quelle
0

Sie können das Objekt der Aktivität wie folgt erhalten.

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

In Kotlin müssen Sie Folgendes verwenden:

this @ ActivityName

Beispiel: Sie sollten es verwenden, wenn Sie "Kontext" in MainActivity.kt definieren möchten

var mContext:Context = this@MainActivity

Warum? Weil in der Kotlin-Sprache @ "von" bedeutet wie:

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

Wenn Sie weitere Informationen erhalten möchten, besuchen Sie die Kotlin Language-Website: Dieser Ausdruck in Kotlin

@canerkaseler

canerkaseler
quelle