我正在开发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)
}
})
Net_Activity及其内容:
class Net_Activity: AppCompatActivity() {
fun main(args: Array<String>) {
dists.start_netClient()
}
}
在构建过程中我得到的代码是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
我对整个Android事物都比较新,但是我缺少的是什么,以及如何通过Intent连接java方法和kotlin类?是最好的努力使用两个活动还是有不同的方法?
答案 0 :(得分:2)
当您使用this
时,您似乎引用了侦听器对象(View.OnClickListener
)而不是您的活动。您应该可以使用引用您的活动而不是侦听器的this@Net_Activity
来解决此问题。整行应如下所示:
val intent = Intent(this@Net_Activity, Net_Activity::class.java)
当您在Kotlin中声明一个对象时(通过object
关键字),您将定义一个匿名类,然后创建该类的单个实例。这允许您覆盖侦听器之类的方法,但正如您所发现的那样,这意味着您必须仔细检查this
的使用情况。
答案 1 :(得分:-1)
尝试再次阅读从Android开发人员文档创建Activity的基础知识。 Read here
Kotlin旨在与Java 100%互操作。这意味着您可以从Kotlin调用任何Java类或方法,反之亦然。因此,您甚至可以将基于Kotlin的Activity与基于Java的活动一起制作,这对您有好处。虽然我建议你只使用100%Kotlin,因为它更容易开发和阅读。
试试这个:
将您的Net_Activity
更改为NetActivity
。这对眼睛来说要好得多。不要忘记更改AndroidManifest.xml
将setOnClickListener
更改为
bButton.setOnClickListener {
// Handler code here.
val intent = Intent(this, NetActivity::class.java)
startActivity(intent)
}
您的main
中的NetActivity
功能是否像public static void main(String[] args)
一样?这不是你怎么做的。您可以覆盖其他Activity
方法,例如onCreate()
,onResume()
等。尝试再次阅读应用基础知识。