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:
classMyActivity:MainActivity(){
val builder =MaterialDialog.Builder(this@MyActivity)}
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.
@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
classMyActivity:MainActivity(){// Call from class itself
val builder =MaterialDialog.Builder(this@MyActivity)
inner classInner{this@MyActivity// Call from the inner class }}
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
this as MainActivity
?MainActivity
, mit welcher InstanzMainActivity
ist er dann verbunden (und wie)? Auf welche Instanz möchten Sie zugreifenthis
?MainActivity
aber immer noch Gießenthis
zuMainActivity
? In einer Unterklasse vielleicht?Antworten:
Sie können einen Verweis auf Ihr
MainActivity
Objekt in Kotlin erhalten, indem Sie einen qualifizierten verwendenthis
. z.B:quelle
@ActivityContext
Attribut) eingefügt, jetzt brauche ich Aktivität. Natürlich weiß ich übergetActivity()
(Kotlinactivity
) 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?Versuchen Sie stattdessen dieses Etikett
quelle
Wenn Sie Activity.this aus einer inneren Klasse aufrufen, müssen Sie inner vor die Klasse stellen
quelle
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
quelle
getActivity()
Äquivalent istthis@activity_name
im Fall des Builders für materialDialogquelle
Sie können das Objekt der Aktivität wie folgt erhalten.
quelle
In Kotlin müssen Sie Folgendes verwenden:
Beispiel: Sie sollten es verwenden, wenn Sie "Kontext" in MainActivity.kt definieren möchten
Warum? Weil in der Kotlin-Sprache @ "von" bedeutet wie:
Wenn Sie weitere Informationen erhalten möchten, besuchen Sie die Kotlin Language-Website: Dieser Ausdruck in Kotlin
@canerkaseler
quelle