ClassCastException: com.demoapp.dialog.img.LoadingView cannot be cast to com.demolib.dialog.img.Load
来源:互联网 发布:中国亚投行失败了知乎 编辑:程序博客网 时间:2024/05/29 19:15
描述:
关于自定义控件无法转换的问题:Caused by: java.lang.ClassCastException: com.demoapp.dialog.img.LoadingView cannot be cast to com.demolib.dialog.img.LoadingView
我相信大家在组件化开发的时候会遇到这样的问题,并且很疑惑,下面我给大家分析下为什么会出现崩溃无法转换的问题。
1.首先创建项目
首先创建一个主项目demoapp:
然后再创建demolibrary:
2.然后主项目(demoapp)引用(demolibrary)
3.创建自定义控件LoadingView
主项目和library里面都创建一个相同名字的自定义控件LoadingView
4.然后在主项目和Library项目对应layout文件下创建一个activity_main.xml文件
主项目xml的内容是这样的:
demolibrary里的xml内容是这样的:
5.写出测试代码
主项目和demolibrary里都在各自的MainActivity里初始化自定义LoadingView控件
然后在主项目里做一个跳转到demolibrary MainAcitivty的操作LoadingView loadingView = (LoadingView) findViewById(R.id.loading);
jumptomain.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setClass(MainActivity.this, com.demolib.MainActivity.class); startActivity(intent); }});
6.测试结果
7.原因分析
首先我们主项目和library里都有各自的自定义控件LoadingView,然后当我们编译的时候会生成对应的R.id
这个时候发现主项目和library项目的build文件里生成的R.id都是一样的
大家有没有发现loading的值是一样的(可能是编译器的Bug),并且library里的loading是灰色的并没有被引用到。
所以在调用自定义控件的时候所有引用的R.id.loading的地址都是指向主项目R文件,当在主项目做跳转到library这个时候找不到指定的包名下的类,也无法转换就会报运行时异常。
8.解决方案
1.把自定义控件抽取出来作为公用的
2.可以命名不同的类名字
3.补充一点:如果是两个项目中都有相同名字的xml文件一定要命名成不同的名字才行,否则所有的引用都是引用的主项目的xml(虽然不会报错崩溃)
欢迎吐槽
阅读全文
1 0
- ClassCastException: com.demoapp.dialog.img.LoadingView cannot be cast to com.demolib.dialog.img.Load
- ClassCastException: $Proxy0 cannot be cast to (com......) 的解决办法
- .ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to
- java.lang.ClassCastException: com.sun.proxy.$Proxy27 cannot be cast to com.bbk.n002.service.Question
- java.lang.ClassCastException: com.sun.proxy.$Proxy27 cannot be cast to com.bbk.n002.service.Question
- java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.
- 9.ClassCastException: com.sun.proxy.$Proxy24 cannot be cast to com.rchange.service.SysUser
- Java.lang.ClassCastException: com.sun.proxy.$Proxy8 cannot be cast to com.bjsxt.service.UserServiceI
- java.lang.ClassCastException: com.sun.proxy.$Proxy8 cannot be cast to com.bjsxt.service.UserServiceI
- java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.xdcjc.model.D_Users
- java.lang.ClassCastException: android.widget.HeaderViewListAdapter cannot be cast to com.android.mms
- java.lang.ClassCastException:android.os.BinderProxy cannot be cast to com.
- java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.ssh.domain.Article
- java.lang.ClassCastException: com.sun.proxy.$Proxy* cannot be cast to***问题解决方案
- java.lang.ClassCastException: java.lang.String cannot be cast to com.qbz.entity.TblUser
- java.lang.ClassCastException: com.sun.proxy.$Proxy4 cannot be cast to
- Spring+hibernate中的问题解决:java.lang.ClassCastException: $Proxy6 cannot be cast to com.mqEsb.service.imp
- java.lang.ClassCastException: com.sun.proxy.$Proxy0 cannot be cast to java.sql.Connection异常问题解决
- Java读取.properties配置文件
- 字符串的格式化
- MFC编辑框实现回车换行
- ViewPager禁止预加载以及ViewPagerAdapter的处理
- PHP上传文件的安全问题
- ClassCastException: com.demoapp.dialog.img.LoadingView cannot be cast to com.demolib.dialog.img.Load
- 完成端口模型IOCP详解 (一)
- ECSHOP模板修改
- 20170619的代码
- 数据库作业 kickstar
- POJ3279-Fliptile
- Java 多态
- StoryBoard创建界面,纯代码push控制器,控制器不显示视图
- linux网络编程之NAT技术与代理服务器调研