¿Cómo acceder a "Activity.this" en Kotlin?

130

Tengo esta pieza de código Java:

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

Quiero obtener el objeto MainActivity en Kotlin. La conversión automática se interrumpe en MainActivity.this.

Bal0r
fuente
this as MainActivity¿ Quizás ?
Marc Plano-Lesay
1
Y si este código no está dentro MainActivity, ¿a qué instancia de MainActivityestá conectado (y cómo)? ¿Con qué instancia quieres acceder this?
tecla
El código de trabajo de Java hace referencia solo a la actividad. ¿Esto, entonces es estático? Aunque no estoy seguro.
Bal0r
¿El código Java de trabajo también está en un archivo completamente separado?
yole
¿Cómo se llama este código, si no está en MainActivitypero aún se está enviando thisa MainActivity? ¿Quizás en una subclase?
Marc Plano-Lesay

Respuestas:

239

Puede obtener una referencia a su MainActivityobjeto en Kotlin utilizando un archivothis . p.ej:

class MyActivity : MainActivity() {
    val builder = MaterialDialog.Builder(this@MyActivity)
}
mfulton26
fuente
1
¿Qué tal Fragmento? He inyectado Contexto en Fragmento (con @ActivityContextatributo), ahora necesito Actividad. Por supuesto, conozco getActivity()(Kotlin activity) en el Fragmento, pero ¿está bien la segunda forma o porque tengo Contexto, es mejor usarlo para acceder a la actividad?
Dr.jacky
@ Dr.jacky Creo que puedes hacer el elenco de '(contexto como? Tu actividad)'. Ahora puede acceder a sus métodos de actividad
Gian Gomen
@ siddarth-g, si tiene un problema con referencias no resueltas, le recomiendo crear una nueva pregunta con un MCVE para obtener ayuda.
mfulton26
@ mfulton26 no es un problema de compilación, este @ ActivityName tampoco funcionó para mí en otro proyecto.
Siddarth G
18

Prueba esta etiqueta en su lugar

this@YourActivityName
El Bala
fuente
1
referencia unresolevd
Siddarth G
No se compila
IgorGanapolsky
2
@IgorGanapolsky cambia el nombre de la actividad por el nombre de tu actividad -_-
Grecha
1

Si está llamando a Activity.this desde una clase interna, debe poner inner antes de la clase

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

    inner class Inner {
        this@MyActivity // Call from the inner class 
    }
}
Allen
fuente
@Allen, tiene razón, se requiere una palabra clave interna para acceder a la actividad dentro de la clase interna
droidev
0

Al igual que lo hace en java para obtener el contexto de actividad como MainActivtiy.this, en kotlin obtendrá el contexto como this @ MainActivity

Shivam Yadav
fuente
¿Estás agregando estos comentarios para qué? ¿Puede dar alguna referencia resuelta? Nos será de ayuda, para que lo sigamos desde la próxima vez
The Bala
0

getActivity()equivalente es this@activity_name en caso de constructor para materialDialog

materialDialog = MaterialDialog.Builder(this)
Mechadroid
fuente
0

Puede obtener el objeto de la actividad de esta manera.

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

En Kotlin, debes usar esta forma:

esto @ ActivityName

Por ejemplo: debe usarlo si desea definir "Contexto" en MainActivity.kt

var mContext:Context = this@MainActivity

¿Por qué? Porque en el lenguaje Kotlin @ tiene un significado "de" como:

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

Si desea obtener más información, puede buscar el sitio web de Kotlin Language: Esta expresión en Kotlin

@canerkaseler

canerkaseler
fuente