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


128

我有这段Java代码:

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

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


也许this as MainActivity吧?
Marc Plano-Lesay

1
如果此代码不在内部MainActivity,则将其MainActivity连接到哪个实例(以及如何连接)?您想以哪个实例的身份访问this
热键

运行中的Java代码仅引用activity.this,因此是静态的吗?我不确定。
Bal0r

正常工作的Java代码是否也在完全独立的文件中?
yole

该代码如何调用(如果不是,MainActivity但仍强制转换this为)MainActivity?也许在子类中?
Marc Plano-Lesay

Answers:


237

您可以MainActivity通过使用合格的this来获得对Kotlin中对象的引用。例如:

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

1
片段怎么样?我已经将Context注入Fragment(with @ActivityContextattribute),现在我需要Activity。当然,我对Fragment中的getActivity()(Kotlin activity)有所了解,但是第二种方法还可以吗?还是因为我有Context,最好使用它来访问活动?
Dr.jacky

@ Dr.jacky我想你可以做'(context as?YourActivity)'演员表。现在您可以访问您的活动方法
Gian Gomen

@ siddarth-g如果您有未解决引用的问题,那么我建议使用MCVE创建一个新问题以获取帮助。
mfulton26

@ mfulton26它的非编译问题this @ ActivityName在另一个项目中也不适用于我。
Siddarth G


1

如果要从内部类调用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,您是正确的,需要使用internal关键字才能访问内部类内的Activity
droidev

0

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


您要添加此评论的目的是什么?您能提供一些参考资料吗?这将对我们有所帮助,以便下次使用它
The Bala

0

getActivity()等效this@activity_name 于materialDialog的生成器

materialDialog = MaterialDialog.Builder(this)


0

在Kotlin中,您必须使用以下方式:

this @ ActivityName

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

var mContext:Context = this@MainActivity

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

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

如果您想了解更多信息,请访问Kotlin语言网站: Kotlin中的此表达式

@canerkaseler

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.