如何在Kotlin中访问"Activity.this"?

Bal*_*l0r 104 java android kotlin

我有这段Java代码:

MaterialDialog builder = new MaterialDialog.Builder(MainActivity.this)
Run Code Online (Sandbox Code Playgroud)

我想在Kotlin中获取MainActivity对象.自动转换中断MainActivity.this.

mfu*_*n26 188

您可以MainActivity使用合格的人this在Kotlin中获取对象的引用.例如:

class MyActivity : MainActivity() {
    val builder = MaterialDialog.Builder(this@MyActivity)
}
Run Code Online (Sandbox Code Playgroud)

  • 碎片怎么样?我已将 Context 注入到 Fragment 中(使用“@ActivityContext”属性),现在我需要 Activity。当然,我知道片段中的`getActivity()`(Kotlin `activity`),但是第二种方法可以吗?或者因为我有上下文,最好使用它来访问活动? (2认同)

bal*_*ala 13

试试这个:

this@ActivityName
Run Code Online (Sandbox Code Playgroud)

  • @IgorGanapolsky 将 ActivityName 更改为您的活动名称 -_- (6认同)
  • @SiddarthG 确保你的内部类标有“内部”,这是我的问题 (3认同)

can*_*ler 13

答案是:this@ActivityName

例如:如果您想在 MainActivity.kt 中定义“Context”,则应该使用它

var mContext:Context = this@MainActivity
Run Code Online (Sandbox Code Playgroud)

为什么?因为在 Kotlin 语言中 @ 的意思是“of”,例如:

val a = this@A // A's this
Run Code Online (Sandbox Code Playgroud)

如果想了解更多信息,可以查看Kotlin语言网站: This Expression in Kotlin


All*_*len 7

如果您从内部类调用 Activity.this,则必须将内部放在类之前

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

    inner class Inner {
        this@MyActivity // Call from the inner class 
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @Allen你是对的,需要内部关键字来访问内部类中的活动 (2认同)

Bri*_*iso 5

在科特林中

this@MainActivity
Run Code Online (Sandbox Code Playgroud)

相当于JAVA

MainActivity.this
Run Code Online (Sandbox Code Playgroud)