Eft*_*_28 3 java android kotlin android-studio
我正在 Android Studio 上开发一个项目。我在 kotlin 文件 (MainActivity.kt) 中有主要活动,我试图通过 Intent 对象从 Java 文件 (dists.java) 内部调用静态方法 (start_netClient()),方法是将此侦听器放在我的MainActivity的 onCreate() 内的 bbutton :
bbutton.setOnClickListener(object: View.OnClickListener {
override fun onClick(view: View): Unit {
// Handler code here.
val intent = Intent(this, Net_Activity::class.java)
startActivity(intent)
}
})
Run Code Online (Sandbox Code Playgroud)
Net_Activity 及其内容:
class Net_Activity: AppCompatActivity() {
fun main(args: Array<String>) {
dists.start_netClient()
}
}
Run Code Online (Sandbox Code Playgroud)
我在构建过程中得到的这段代码是 MainActivity.kt 上 Intent 上的这个错误:
Error:(65, 30) 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
Run Code Online (Sandbox Code Playgroud)
我对整个 Android 的东西比较陌生,但是我缺少什么,如何通过 Intent 连接 java 方法和 kotlin 类?使用两个活动是尽最大努力还是有不同的方法?
似乎当您使用 时this,您是在引用侦听器对象 ( View.OnClickListener) 而不是您的活动。您应该能够通过使用 来解决此问题this@Net_Activity,它引用您的活动而不是侦听器。整行应如下所示:
val intent = Intent(this@Net_Activity, Net_Activity::class.java)
Run Code Online (Sandbox Code Playgroud)
当您在 Kotlin 中(通过object关键字)声明一个对象时,您正在定义一个匿名类,然后创建此类的单个实例。这允许您覆盖诸如侦听器之类的方法,但正如您发现的那样,这意味着您必须仔细检查this.