Android开发石头剪刀布App时findViewById报类型转换错误
问题产生原因
报错本质是类型不匹配导致的强转失败:
- 你的XML布局中id为
answer1的控件是第三方库实现的xyz.teamgravity.imageradiobutton.GravityRadioGroup,不是Android系统原生的android.widget.RadioGroup,两个类不存在继承关系,无法互相转换。 - Java代码中你将
answer1变量声明为原生RadioGroup类型,执行findViewById(R.id.answer1)时,系统会自动尝试把找到的第三方控件实例强转为原生RadioGroup类型,直接触发ClassCastException。 - 代码里还存在一个隐藏的同类问题:布局内的单选选项是第三方的
GravityImageRadioButton,不是原生RadioButton,如果不修改,后续执行选中项获取逻辑时会再次触发同类型的强转报错。
修复步骤
- 第一步:在MainActivity文件顶部导入第三方控件对应的类
import xyz.teamgravity.imageradiobutton.GravityRadioGroup; import xyz.teamgravity.imageradiobutton.GravityImageRadioButton;
- 第二步:修正变量声明类型,把原来的
RadioGroup answer1;替换为
GravityRadioGroup answer1;
- 第三步:修正两处选中按钮的类型声明,把所有
RadioButton radiobutton1 = findViewById(answer);替换为
GravityImageRadioButton radiobutton1 = findViewById(answer);
注:第三方
GravityImageRadioButton本身自带getText()方法,你原来写的文本获取、结果展示逻辑不需要改动,可以正常拿到选项对应的文本值。
- 第四步:确认模块级build.gradle中已经正确添加该图片单选按钮库的依赖,点击Sync Now同步Gradle配置后重新编译运行即可。
内容的提问来源于stack exchange,提问作者ssojitra62
相关产品推荐
相关产品推荐

