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.

Bal0r
fonte
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)
}
mfulton26
fonte
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
18

Experimente este marcador

this@YourActivityName
The Bala
fonte
1
referência não resolvida
Siddarth G
Não compila
IgorGanapolsky
2
@IgorGanapolsky altere o ActivityName para o nome da sua atividade -_-
Grecha
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
fonte
@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

Shivam Yadav
fonte
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)
Mechadroid
fonte
0

Você pode obter o objeto de atividade como este.

class DemoActivity : MainActivity() {
    val builder = MaterialDialog.Builder(this@DemoActivity)
}
Nikhil Katekhaye
fonte
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

canerkaseler
fonte