Et si ce code n'est pas à l'intérieur MainActivity, à quelle instance de MainActivityest-il connecté (et comment)? À quelle instance souhaitez-vous accéder this?
raccourci clavier du
Le code Java fonctionnel fait uniquement référence à l'activité. Ceci, donc un code statique? Je n'en suis pas sûr.
Bal0r
Le code Java de travail est-il également dans un fichier complètement séparé?
yole
Comment est ce code appelé, sinon , MainActivitymais encore coulée thisà MainActivity? Dans une sous-classe peut-être?
Marc Plano-Lesay
Réponses:
239
Vous pouvez obtenir une référence à votre MainActivityobjet dans Kotlin en utilisant un fichier qualifiéthis . par exemple:
classMyActivity:MainActivity(){
val builder =MaterialDialog.Builder(this@MyActivity)}
Et le fragment? J'ai injecté du contexte dans le fragment (avec @ActivityContextattribut), maintenant j'ai besoin d'activité. Bien sûr, je connais getActivity()(Kotlin activity) dans le Fragment, mais est-ce que la deuxième façon est correcte ou parce que j'ai du contexte, il vaut mieux l'utiliser pour accéder à l'activité?
Dr.jacky
@ Dr.jacky Je pense que vous pouvez faire le casting de '(contexte comme? YourActivity)'. Maintenant, vous pouvez accéder à vos méthodes d'activité
Gian Gomen
@ siddarth-g si vous rencontrez un problème avec des références non résolues, je vous recommande de créer une nouvelle question avec un MCVE pour obtenir de l'aide.
mfulton26
@ mfulton26 ce n'est pas un problème de compilation, ce @ ActivityName ne fonctionnait pas non plus pour moi dans un autre projet.
@IgorGanapolsky change le ActivityName en votre nom d'activité -_-
Grecha
1
Si vous appelez Activity.this depuis une classe interne, vous devez mettre interne avant la classe
classMyActivity:MainActivity(){// Call from class itself
val builder =MaterialDialog.Builder(this@MyActivity)
inner classInner{this@MyActivity// Call from the inner class }}
@Allen vous avez raison, un mot-clé interne est requis pour accéder à l'activité à l'intérieur de la classe interne
droidev
0
Tout comme vous le faites en java pour obtenir le contexte de l'activité en tant que MainActivtiy.this, dans kotlin, vous obtiendrez le contexte sous la forme @ MainActivity
vous ajoutez ces commentaires pour quoi? Pouvez-vous donner une référence résolue? Cela nous sera utile, pour que nous le suivions à partir de la prochaine fois
The Bala
0
getActivity()l'équivalent est this@activity_name
dans le cas du constructeur pour materialDialog
this as MainActivity
- être ?MainActivity
, à quelle instance deMainActivity
est-il connecté (et comment)? À quelle instance souhaitez-vous accéderthis
?MainActivity
mais encore couléethis
àMainActivity
? Dans une sous-classe peut-être?Réponses:
Vous pouvez obtenir une référence à votre
MainActivity
objet dans Kotlin en utilisant un fichier qualifiéthis
. par exemple:la source
@ActivityContext
attribut), maintenant j'ai besoin d'activité. Bien sûr, je connaisgetActivity()
(Kotlinactivity
) dans le Fragment, mais est-ce que la deuxième façon est correcte ou parce que j'ai du contexte, il vaut mieux l'utiliser pour accéder à l'activité?Essayez plutôt cette étiquette
la source
Si vous appelez Activity.this depuis une classe interne, vous devez mettre interne avant la classe
la source
Tout comme vous le faites en java pour obtenir le contexte de l'activité en tant que MainActivtiy.this, dans kotlin, vous obtiendrez le contexte sous la forme @ MainActivity
la source
getActivity()
l'équivalent estthis@activity_name
dans le cas du constructeur pour materialDialogla source
Vous pouvez obtenir l'objet de l'activité comme ceci.
la source
Dans Kotlin, vous devez utiliser cette méthode:
Par exemple: vous devez l'utiliser si vous souhaitez définir "Contexte" dans MainActivity.kt
Pourquoi? Parce qu'en langage Kotlin, @ signifie "de" tel que:
Si vous souhaitez en savoir plus, vous pouvez consulter le site Web de Kotlin Language: This Expression in Kotlin
@canerkaseler
la source