自定义View:关于Caused by: java.lang.NoSuchMethodException异常

在编写自定义View控件,在XML文件上面使用自定义的控件的时候出现了错误:

android.view.InflateException: Binary XML file line #8: Error inflating clas

这里说编写的XML代码有误:

1.有可能你的XML控件编写有误,这里有可能是你的包名填写有误,使用crtl+鼠标点击看能不能跳转到该组件的定义的地方,如果不可以跳转到你编写的话,仔细检查就可以了

2.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这种引用方式是必须实现的,用于读取你在layout文件上面改写的属性(例如 android:text="XX" ),三个构造函数会在不同的应用场合,使用不同的主题来实例化一个View对象。

注意:不同改写构造函数的传入参数, 

    View(Context context,int data)     //Simple constructor to use when creating a view from code

    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

不要改写构造函数中的参数,因为我们在实例化一个View的时候需要进行一些数据的实例化,所以有时通过构造函数传入数据,但是自定义View在XML引入实例化的时候,只允许使用派生基类的三种构造函数,多出的构造函数就会导致程序报出错误:Caused by: java.lang.NoSuchMethodException,所以把是上面的红色构造方法去掉就可以了,传入数据改用,set/get方式,然后在进行View的初始化操作。

一般如果你自定义的View构造函数编写正确的话,在XML文件 编写的时候,按alt + / 能高亮提示,如果没有高亮说明你的View的编写有误,有可能是你的构造方法没有写好。

你可能感兴趣的:(Android,自定义View异常,异常)