Kotlin Intent语法错误

3

我试图在Android Studio中使用Kotlin设置Intent,以启动另一个Activity.kt

val i : Intent = Intent(this, MainActivity::class.java)

Android Studio显示错误,无法编译:

Error:(23, 26) None of the following functions can be called with the arguments supplied: 
public constructor Intent(p0: Context!, p1: Class<*>!) defined in android.content.Intent 
public constructor Intent(p0: String!, p1: Uri!) defined in android.content.Intent

我认为语法是正确的,那么问题在哪里呢?


3
这个“this”是不是“Context”类型? - lelloman
这行代码是在哪里编写的?在哪个类中?在一个方法中吗?还是在顶层声明?请复制可能不是整个类但相关的部分。 - Geoffrey Marizy
我发现错误 - this@MainActivity 是正确的。 - kamilp
val i = Intent(this@MainActivity, Activity::class.java) - kamilp
3个回答

15

在这个MainActivity中,创建一个指向Activity类的Intent对象i。


谢谢@kamilp提供的可行解决方案,但是你能否解释一下为什么我们需要在语句末尾添加.java吗? - Ravi Vaniya
1
根据我所看到的,.java是来自JvmClassMapping.kt文件的kotlin方法。/**
  • 返回与给定[KClass]实例对应的Java [Class]实例。 */ '@Suppress("UPPER_BOUND_VIOLATED") public val <T> KClass<T>.java: Class<T> @JvmName("getJavaClass") get() = (this as ClassBasedDeclarationContainer).jClass as Class<T>'
因此,可能Intent需要一个Java类,而不是kotlin类。
- kamilp
好的,明白了。谢谢 @kamilp - Ravi Vaniya

2
你应该按照以下方式使用context包:

val intent = Intent(this@LoginActivity,MainActivity::class.java)
           startActivity(intent)

感谢您。
最初的回答:

-1
你应该这样编写代码: val i : Intent by lazy { Intent(this, MainActivity::class.java) }


这将会产生与原问题中完全相同的编译错误。你的回答并没有真正帮助到问题解决。 - yole
是的,如果“this”不是“Context”的实例 - Constantin Chernishov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接