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
相关产品推荐
相关产品推荐

