Android onClick绑定increment方法报错,increment()内应传入什么参数?
问题根因
- 通过
android:onClick绑定的点击方法,系统调用时会强制传入被点击的View实例作为参数,所以方法签名必须包含一个View类型的参数,否则系统找不到匹配方法就会触发崩溃,这也是你写无参、Int参数版本运行崩溃的原因。 - xml里的increment标红,就是因为当前代码里的
increment()是无参的,和要求的签名不匹配,IDE无法识别到对应的绑定方法。 - 你用
increment(view: View?)之后标红消失是签名符合要求了,出现未使用参数告警是因为Kotlin检测到你方法里没有用到这个view参数。
解决方法
- 把你的increment、decrement、submitOrder三个点击方法的签名都修改为带下划线前缀的View参数,即可同时解决标红、未使用参数告警、运行崩溃的问题:
// 数量加1 fun increment(_view: View?) { amount++ display(amount) } // 数量减1 fun decrement(_view: View?) { amount-- display(amount) } // 提交订单 fun submitOrder(_view: View?) { // 注意删除方法内重复定义的amount变量,否则会覆盖全局的amount,导致下单数量永远是2 display(amount) displayPrice(amount*10) }
- 下划线前缀是Kotlin的约定写法,用来标识该参数是刻意不使用的,IDE会自动过滤未使用告警,不需要额外加压制注解。
如果你不想用下划线写法,也可以在方法上方加注解
@Suppress("UNUSED_PARAMETER")来关闭告警,不过下划线写法更简洁直观,更推荐使用。
内容的提问来源于stack exchange,提问作者Lisa Baron
相关产品推荐
相关产品推荐

