【问题标题】:Kotlin Intent syntax errorKotlin Intent 语法错误
【发布时间】:2018-08-16 20:22:57
【问题描述】:

我试图在 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

我认为语法是正确的,那么有什么问题呢?

【问题讨论】:

  • Context类型的'this`?
  • 这行代码写在哪里?在女巫课上?在一个方法中?这是顶级声明?请不要复制整个班级,而是复制相关部分。
  • 我发现错误 - this@MainActivity 是正确的
  • val i = Intent(this@MainActivity, Activity::class.java)

标签: android android-intent kotlin


【解决方案1】:

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

【讨论】:

  • 感谢@kamilp +1 为工作溶胶。但是您能否解释一下为什么我们需要在语句末尾附加.java
  • @Ravi Vaniya 从我看到的 .java 文件中是一个来自文件 JvmClassMapping.kt 的 kotlin 方法。 /** * 返回与给定 [KClass] 实例对应的 Java [Class] 实例。 */ '@Suppress("UPPER_BOUND_VIOLATED") public val KClass.java: Class @JvmName("getJavaClass") get() = (this as ClassBasedDeclarationContainer).jClass as Class'所以,可能 Intent 需要一个 java 类,而不是 kotlin 类。
  • 好的好的,知道了。谢谢@kamilp
【解决方案2】:

您应该按如下方式使用包上下文:

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

谢谢。

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 这将给出与原始问题完全相同的编译错误。你的回答并没有真正的帮助。
    • 是的,如果this 不是Context 的实例
    猜你喜欢
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 2021-08-21
    • 2020-06-08
    相关资源
    最近更新 更多