导致NoSuchMethodError的Kotlin Android Button.onClickListener

导致NoSuchMethodError的Kotlin Android Button.onClickListener,第1张

概述我想我已经找到了使用kotlin for android的怪癖,或者我对语法的理解存在一些差距. 尝试为按钮设置onClickListener会抛出NoSuchMethodError 这是错误的代码 button.setOnClickListener(Button.OnClickListener { fun onClick(view: View){ 我想我已经找到了使用kotlin for android的怪癖,或者我对语法的理解存在一些差距.

尝试为按钮设置onClickListener会抛出NoSuchMethodError

这是错误的代码

button.setonClickListener(button.OnClickListener {            fun onClick(vIEw: VIEw){                val intent : Intent = Intent(this,DetailActivity::class.java)                if(obj is String) {                    intent.putExtra("topic",obj)                }                startActivity(intent)            }        })

这是输出的堆栈跟踪

java.lang.NoSuchMethodError: No static method OnClickListener(Lkotlin/jvm/functions/Function1;)LandroID/vIEw/VIEw$OnClickListener; in class LandroID/Widget/button; or its super classes (declaration of 'androID.Widget.button' appears in /system/framework/framework.jar:classes2.dex)

有谁知道什么?

解决方法 有趣的是,我没有得到那个错误,你的代码为我编译.但是,它不会因为一个不同的原因而起作用:你在lambda中传入一个lambda作为{}内的监听器,这意味着当click事件发生时它将被执行.虽然没有代码在其中运行,但您只是定义了一个名为onClick的 local function永远不会被调用.

button.setonClickListener(button.OnClickListener {    fun onClick(vIEw: VIEw){        ...    }    Log.d("TAG","hi") // this is the code that would be executed on click events})

有两种方法可以修复语法:

首先,您可以使用object expression来创建监听器,这与您编写的内容非常接近,并且与经典Java解决方案一致,它显式创建了一个匿名类(请注意,OnClickListener接口实际上位于VIEw类之下):

button.setonClickListener(object: VIEw.OnClickListener {    overrIDe fun onClick(v: VIEw?) {        val intent = ...    }})

或者,您可以使用更简单,更像Kotlin的语法,当您尝试使用之前的长格式时,IDE会建议使用SAM conversion:

button.setonClickListener {    val intent = ...}

这个解决方案使用lambda就像你的初始代码一样,它只是没有命名它明确转换为什么接口,并且删除了不需要单个lambda参数的().

总结

以上是内存溢出为你收集整理的导致NoSuchMethodError的Kotlin Android Button.onClickListener全部内容,希望文章能够帮你解决导致NoSuchMethodError的Kotlin Android Button.onClickListener所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1122599.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存