¿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.


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)
}

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


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, 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


¿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)

0

Puede obtener el objeto de la actividad de esta manera.

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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.