在今天的搬砖中,从登录页进入主页面时,程序Crash了。然后立马去看崩溃信息。
崩溃信息.png看到这个后立马去看WorkFragment的OnCreateView方法。看了下,代码没逻辑错误,没有书写错误。再看看错误信息,看到了XML三个字,立马打开,布局文件。看了布局文件,貌似也没问题。然后就在百度上面寻找答案android.view.InflateException: Binary XML file line #2: Error inflating class null。网上的答案各种各样。
第一种解释是自定义的View出现了问题:这种说法的错误一般有两种情况。
1. 引用类名问题:自定义了一个View,将他用于布局文件中,假设他的包名叫MyPackage,类名叫MyTestView,这个时候你在XML作为布局元素来布局的话,必须使用完整路径名,也就是包名加类名来引用,用MyPackage.MyTestView来进行引用。
2.构造函数问题:自定义一个View,必须派生实现基类View的三个构造函数
View(Context context) //Simple constructor to use when creating a view from code
View(Context context, AttributeSet attrs) //Constructor that is called when inflating a view from XML
View(Context context, AttributeSet attrs, int defStyle) //Perform inflation from XML and apply a class-specific base style
从文档上的介绍来看,第二个和第三个构造函数对于XML这种引用方式是必须实现的,这三个构造函数应该是在不同的应用场合来实例化一个View对象。
看了下我写的自定义View,这两个没毛病。所以这种解释被我Pass了。
第二种解释就是书写错误:比如说少了一个字母或者多了个字母之类的。
然后我又大概瞄了一眼代码(没有全部看).对于书写错误,一般分两种,一种是类型错误,如控件书写错误,或者include之类的错误。这种情况下并不会出现飘红。另外一种就是属性错误。包括关键字和属性名字的错误,这种会立马飘红。这种问题能立马发现。
貌似陷入了一个小小困局,突然灵光一闪。看布局(Design)。然后果然有猫腻。Unable to inflate view tag without class attribute。再次百度。
看了一个比较靠谱的答案,于是乎第三种出来了。
第三种:控件类型大小写错误。
迅速再次瞄一遍代码。大小写都正确的啊。然后闭上眼睛,冥思了5秒。果断阶段性的删代码,看看Design什么时候正常(这个删代码要讲究技巧,先一节一节删,确定了节点,再往子节点剖析)。到<include layout = "@layout/layout_line_margintop">删的时候,就正常了,迅速打开该文件。7行代码。
<view xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="8dp"
android:background="@color/lineColor">
</view>
迅速确定错误。view类名大小写错误。
网友评论