如何在 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 中访问 variant.outputFileName