Como acessar "Activity.this" no Kotlin?


128

Eu tenho este pedaço de código Java:

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

Eu quero obter o objeto MainActivity no Kotlin. A conversão automática é interrompida em MainActivity.this.


Talvez this as MainActivity?
precisa saber é o seguinte

1
E se esse código não estiver dentro MainActivity, a qual instância MainActivityele está conectado (e como)? Qual instância você deseja acessar this?
hotkey

O código Java em funcionamento faz referência apenas à atividade. Isso, então estático? Não tenho certeza.
Bal0r

O código Java em funcionamento também está em um arquivo completamente separado?
yole 12/01

Como é que este código chamado, se não em MainActivitymas ainda lançando thisa MainActivity? Em uma subclasse, talvez?
precisa saber é o seguinte

Respostas:


237

Você pode obter uma referência ao seu MainActivityobjeto no Kotlin usando um qualificadothis . por exemplo:

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

1
E quanto ao fragmento? Injetei o Contexto no Fragmento (com @ActivityContextatributo), agora preciso de Atividade. Claro, eu sei sobre getActivity()(Kotlin activity) no fragmento, mas é o segundo caminho certo ou porque eu tenho o Contexto, é melhor usá-lo para acessar a atividade?
precisa saber é o seguinte

@ Dr.jacky eu acho que você pode fazer '(contexto como? YourActivity)' elenco. Agora você pode acessar seus métodos de atividade
Gian Gomen

@ siddarth-g Se você está tendo problemas com referências não resolvidas, recomendo criar uma nova pergunta com um MCVE para obter ajuda.
mfulton26

@ mfulton26 não é problema de compilação, esse @ ActivityName não funcionou para mim em outro projeto também.
Siddarth G


1

Se você estiver chamando Activity.this de uma classe interna, precisará colocar inner antes da classe

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

    inner class Inner {
        this@MyActivity // Call from the inner class 
    }
}

@Allen você está correto, a palavra-chave interna é necessária para acessar a Atividade na classe interna
droidev 18/02

0

Assim como você faz em java para obter o contexto de atividade como MainActivtiy.this, no kotlin, você obtém o contexto como @ MainActivity


você está adicionando esses comentários para quê? Você pode dar uma referência resolvida? Será útil para nós, para que o sigamos da próxima vez
The Bala

0

getActivity()equivalente é this@activity_name no caso de construtor para materialDialog

materialDialog = MaterialDialog.Builder(this)

0

Você pode obter o objeto de atividade como este.

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

0

No Kotlin, você deve usar esta maneira:

this @ ActivityName

Por exemplo: você deve usá-lo se desejar definir "Contexto" em MainActivity.kt

var mContext:Context = this@MainActivity

Por quê? Porque na linguagem Kotlin @ significa "de" como:

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

Se você quiser obter mais informações, consulte o site da Kotlin Language: This Expression in Kotlin

@canerkaseler

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.