Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了导致NoSuchMethodError的Kotlin Android Button.onClickListener大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想我已经找到了使用kotlin for android的怪癖,或者我对语法的理解存在一些差距. @H_450_5@ @H_450_5@尝试为按钮设置onClickListener会抛出NoSuchMethodError

@H_450_5@这是错误代码

@H_450_5@
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)
            }
        })
@H_450_5@这是输出的堆栈跟踪

@H_450_5@
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)
@H_450_5@有谁知道什么?

解决方法

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

    Log.d("TAG","hi") // this is the code that would be executed on click events
})
@H_450_5@有两种方法可以修复语法:

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

@H_450_5@
button.setOnClickListener(object: View.onClickListener {
    override fun onClick(v: View?) {
        val intent = ...
    }
})
@H_450_5@或者,您可以使用更简单,更像Kotlin的语法,当您尝试使用之前的长格式时,IDE会建议使用SAM conversion

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

大佬总结

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

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。