Android使用ExpandableFab时出现ClassCastException类型转换错误如何解决
报错问题解决
java.lang.ClassCastException: com.nambimobile.widgets.efab.ExpandableFabLayout cannot be cast to com.nambimobile.widgets.efab.ExpandableFab
at CategoryActivity.onCreate(CategoryActivity.java:56)
根因
核心原因是控件类型不匹配:你布局文件中id为exFab的控件实际是ExpandableFabLayout容器类型,代码中错误地用ExpandableFab类型接收,触发类型转换异常。
修复步骤
- 调整布局id分配
先修改activity_main.xml:ExpandableFabLayout是外层容器,里面包含的可点击悬浮按钮才是ExpandableFab类型,给真正的ExpandableFab子控件单独设置id,不要复用容器的id。 - 修正代码中的控件类型声明
如果你需要操作的是外层容器,修改类型声明:
如果你需要操作的是子悬浮按钮,使用子按钮的id获取实例:// 替换原有的ExpandableFab exFab = findViewById(R.id.exFab); ExpandableFabLayout exFabLayout = findViewById(R.id.exFab);// 假设子按钮的id设为R.id.real_efab ExpandableFab exFab = findViewById(R.id.real_efab); - 修复点击事件逻辑
你原有代码的点击监听中switch语句缺少break,会触发后续case的执行,补充break即可:exFab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { switch (view.getId()) { case (R.id.exfab_add_category): Intent intent = new Intent(CategoryActivity.this, AddCategoryActivity.class); startActivity(intent); break; // 补充break case (R.id.exfab_delete_category): // 补充删除逻辑 break; default: break; } } });
内容的提问来源于stack exchange,提问作者XtinaG
相关产品推荐
相关产品推荐

