Boom Menu运行报ClassCastException类型转换错误的原因及修复方法
报错原因及修复方案
报错原因
你在XML布局中为BoomMenuButton指定的按钮类型是simpleCircle,该类型对应的构建器必须是SimpleCircleButton.Builder,但你在Java代码中调用addBuilder()方法时传入的是TextOutsideCircleButton.Builder实例,两种构建器类型不匹配,系统在强转时抛出类型转换异常。
修复方案
有两种可选修复方式,按需选择即可:
方案1:修改XML配置,适配带文字的按钮样式
如果需要保留按钮外侧的文字展示,修改XML中BoomMenuButton的属性,将按钮类型更换为和Java代码匹配的textOutsideCircle,同时更换对应的位置配置:
<com.nightonke.boommenu.BoomMenuButton android:id="@+id/bmb" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="32dp" android:layout_marginBottom="32dp" app:bmb_buttonEnum="textOutsideCircle" app:bmb_buttonPlaceEnum="buttonPlace_toc_9_1" app:bmb_normalColor="#64DD17" app:bmb_piecePlaceEnum="piecePlace_toc_9_1" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" />
修改后无需改动Java代码,直接运行即可。
方案2:修改Java代码,适配简单圆形按钮样式
如果不需要按钮带文字,保留XML原有配置,修改Java代码中的构建器类型,去掉文字配置:
private void setbmbtn() { boomMenuButton.addBuilder(new SimpleCircleButton.Builder()); boomMenuButton.addBuilder(new SimpleCircleButton.Builder()); boomMenuButton.addBuilder(new SimpleCircleButton.Builder()); boomMenuButton.addBuilder(new SimpleCircleButton.Builder()); boomMenuButton.addBuilder(new SimpleCircleButton.Builder()); boomMenuButton.addBuilder(new SimpleCircleButton.Builder()); boomMenuButton.addBuilder(new SimpleCircleButton.Builder()); boomMenuButton.addBuilder(new SimpleCircleButton.Builder()); boomMenuButton.addBuilder(new SimpleCircleButton.Builder()); }
注意事项
- BoomMenuButton的
bmb_buttonEnum属性值、对应的构建器类型、bmb_buttonPlaceEnum、bmb_piecePlaceEnum必须一一对应,不能混用不同类型的配置 - 如需自定义按钮图标,可以在Builder后链式调用
.normalImageRes(R.drawable.xxx)方法设置图标资源
内容的提问来源于stack exchange,提问作者Sina Moradi
相关产品推荐
相关产品推荐

