Android 自定义View 在 XML文件中使用脱坑

本文主要是针对自定义 View 在 XML 中使用时,出现的 android.view.InflateException :Error inflating class xxx

解决这个问题,首先要做的不是谷歌百度,最先该做的是打开的 logcat 面板,搜索自定义 View 的类名,查看异常日志。

如果在异常日志中发现这样一行异常代码    java.lang.NoSuchMethodException: [class android.content.Context, interface android.util.AttributeSet]

那你代码问题就石锤了,必定是少了构造方法,想在 XML 布局文件中使用自定义 View,那么至少要实现前两个默认构造方法。

这里我们提一下自定义 View 中的三个构造方法

当你在代码中直接创建这个自定义 View 时,会走到这个构造方法中

    public View (Context context)

这个是在 XML 创建但是没有指定 style 的时候被调用

    public View (Context context, AttributeSet attrs)

给 View 提供一个基本的 style ,如果我们没有对 View 设置某些属性,就使用这个 style 中的属性。    

    public View (Context context, AttributeSet attrs, int defStyle)  

本文的重点来了

现在我们说一种特殊情况,你的自定义 View 在布局中,此时你在代码里 inflate 了这个布局,出现InflateException 如果你的自定义 View并没有少实现构造方法,并且在异常日志中看到你的自定 View 类名ClassNotFoundException 这个异常上报,那么很有可能是你在 inflate 函数中传的 Context 实体,拿不到你自定义 View 上面的资源,这时你将普通的 Context 换成 ApplicationContext 就基本可以解决这个问题。

最后提一下,笔者是在插件化的一个插件中发现此问题,自定义 View 要在一个 fragment 中 inflate 出来,这里如果不传 ApplicationContext 的话就会出现 ClassNotFoundException 这个问题。


推荐一个公众号,不吐槽,不毒舌,偶尔发发文章,偶尔推荐好物,欢迎关注或者有女票的程序狗们推荐给女票


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容