Android XML onClick绑定方法提示Cannot resolve symbol 'onRadioButtonClicked'报错
报错原因
android:onClick属性默认会在加载该XML布局的宿主Activity中查找对应的方法,不会主动查找Fragment中定义的方法,这是系统的机制问题,和方法名是否一致无关。- 你在Fragment中定义的
onRadioButtonClicked是私有方法(private修饰),就算是写在Activity中,私有方法也无法被系统通过反射找到,必须是public修饰的无返回值方法才能被android:onClick识别。 - 你在
onCreateView中调用方法时传入的是RadioGroup实例,和方法内部判断view is RadioButton的逻辑冲突,这属于运行时逻辑问题,不是XML报错的直接原因。
解决办法
推荐用更适配RadioGroup场景的监听方案,避免使用android:onClick属性:
- 直接在Fragment中给RadioGroup设置选中监听器,代码更易维护,也不会出现XML识别问题:
// 在Fragment的onViewCreated方法中添加如下代码 binding.radioGroupLag.setOnCheckedChangeListener { _, checkedId -> when(checkedId) { R.id.radioButtonGreek, R.id.radioButtonGerman, R.id.radioButtonEnglish -> { changeLag() } } }
然后删除XML中所有RadioButton的android:onClick= "onRadioButtonClicked"属性,同时删除你原来定义的onRadioButtonClicked方法和onCreateView中的手动调用代码即可。
如果一定要使用android:onClick属性,需要做以下修改:
- 把
onRadioButtonClicked方法移到加载该布局的宿主Activity中,去掉private修饰,改为public方法 - 在Activity的该方法内获取当前显示的Fragment实例,转发点击事件到Fragment中处理
内容的提问来源于stack exchange,提问作者Zartilas
相关产品推荐
相关产品推荐

