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

Android Kotlin中View Binding设置OnClickListener无效问题求助

问题:View Binding设置按钮监听器不生效,findViewById却正常工作

我正在学习一份旧教程,教程使用Synthetics实现视图绑定,我尝试改用View Binding。需求是在AddEditFragment.kt中给按钮设置监听器,通过回调触发MainActivity的onSaveClicked方法。

已完成的配置

  • 导入View Binding类:
import com.funkytwig.tasktimer.databinding.FragmentAddEditBinding
  • 在Fragment类中声明lateinit类型的Binding变量:
class AddEditFragment : Fragment() {
    private lateinit var binding: FragmentAddEditBinding
}

两种实现对比

1. 使用findViewById的版本(正常生效)

在onActivityCreated中通过findViewById获取按钮并设置监听器,点击按钮能正常触发onSaveClicked(已通过Log验证):

override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)
    val addEditSave = view?.findViewById(R.id.addEditSave) as Button
    addEditSave.setOnClickListener { listener?.onSaveClicked() }
}

2. 使用View Binding的版本(监听器不生效)

同样在onActivityCreated中设置监听器,代码无编译或运行报错,但点击按钮后onSaveClicked完全不触发:

override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)
    binding.addEditSave.setOnClickListener { listener?.onSaveClicked() }
}

回调接口定义

AddEditFragment中定义的回调接口:

interface OnSaveClicked {
    fun onSaveClicked()
}

想请教:为什么两种方式逻辑一致,但View Binding版本的监听器无法正常工作?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 04:45:35