如何在 Kotlin 中访问“Activity.this”?

Posted

技术标签:

【中文标题】如何在 Kotlin 中访问“Activity.this”?【英文标题】:How to access "Activity.this" in Kotlin? 【发布时间】:2017-05-27 18:55:22 【问题描述】:

我有这段 Java 代码:

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

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

【问题讨论】:

可能是this as MainActivity? 如果这段代码不在MainActivity 中,那么它连接到MainActivity 的哪个实例(以及如何连接)?您想以this 的身份访问哪个实例? 工作 Java 代码只引用了 activity.this,所以是静态的吗?我不确定。 工作 Java 代码是否也在一个完全独立的文件中? 如果不在MainActivity 中但仍将this 转换为MainActivity,如何调用此代码?也许在一个子类中? 【参考方案1】:

您可以使用qualified this 在 Kotlin 中获取对您的 MainActivity 对象的引用。例如:

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

【讨论】:

片段怎么样?我已经将 Context 注入 Fragment(带有@ActivityContext 属性),现在我需要 Activity。当然,我知道Fragment中的getActivity()(Kotlin activity),但是第二种方式可以吗还是因为我有上下文,最好用它来访问活动? @Dr.jacky 我认为您可以进行 '(context as?YourActivity)' 演员表。现在您可以访问您的活动方法 @siddarth-g 如果您对未解决的引用有疑问,那么我建议您使用MCVE 创建一个新问题以获得帮助。 @mfulton26 它不是编译问题 this@ActivityName 在另一个项目中也不适用于我。【参考方案2】:

试试这个标签

this@YourActivityName

【讨论】:

未解决的参考 无法编译 @IgorGanapolsky 将 ActivityName 更改为您的 Activity 名称 -_- @SiddarthG 确保你的内部类标有“内部”这是我的问题【参考方案3】:

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

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

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

【讨论】:

@Allen 你是对的,需要 inner 关键字才能访问内部类中的 Activity【参考方案4】:

答案是:this@ActivityName

例如:如果你想在 MainActivity.kt 中定义“上下文”,你应该使用它

var mContext:Context = this@MainActivity

为什么?因为在 Kotlin 语言中,@ 表示“的”,例如:

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

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

【讨论】:

【参考方案5】:

在科特林中

this@MainActivity

相当于JAVA

MainActivity.this

【讨论】:

【参考方案6】:

就像您在 java 中将活动上下文获取为 MainActivtiy.this 一样,在 kotlin 中您将获取上下文为 this@MainActivity

【讨论】:

你添加这个 cmets 是为了什么?你能给出一些解决的参考吗?对我们有帮助,让我们下次继续关注【参考方案7】:

getActivity() 等价于 this@activity_name 如果是materialDialog的构建器

materialDialog = MaterialDialog.Builder(this)

【讨论】:

【参考方案8】:

可以这样获取activity的对象。

class DemoActivity : BaseActivity() 
    val builder = MaterialDialog.Builder(this@DemoActivity)

【讨论】:

以上是关于如何在 Kotlin 中访问“Activity.this”?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 kotlin 中“静态”访问类的成员?

如何在 Kotlin 中访问 variant.outputFileName

如何在 kotlin android 的活动中访问应用程序类变量

如何在 Kotlin 的 Ktor 中提取访问权限验证

在 kotlin 中,如何从子类访问父类中受保护的静态成员

如何通过 Kotlin 中的 gson 访问嵌套 JSON 中的值?