You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请教:两种setOnClickListener写法的差异及第一种失效原因

两种setOnClickListener写法的区别分析

核心差异点

两种写法的本质是传递给setOnClickListener的参数类型完全不同:


第一种无响应的写法

actionButton.setOnClickListener{Navigation.createNavigateOnClickListener(R.id.next_action,null)}

这里的Lambda表达式对应的是() -> Unit类型,意思是:当按钮被点击时,执行Lambda内部的代码——也就是调用Navigation.createNavigateOnClickListener()生成一个OnClickListener实例,但仅此而已。你只是在点击时创建了监听器对象,却没有把这个对象绑定到按钮的点击逻辑上,自然不会触发导航操作,所以点击无响应。


第二种正常生效的写法

actionButton.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.next_action,null))

setOnClickListener方法的参数要求是OnClickListener类型,而Navigation.createNavigateOnClickListener()本身返回的就是一个符合要求的OnClickListener实例。这里直接把这个实例传给方法,按钮点击时就会调用该实例的onClick方法,执行内置的导航逻辑,所以能正常生效。


简单总结:

  • 第一种是“点击时生成监听器”,但不用它干活;
  • 第二种是“直接把做好的监听器给按钮”,点击时监听器直接干活。

内容的提问来源于stack exchange,提问作者Jaguar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 11:45:35