刚学android,遇到一个问题不知道怎么解决,编译没错,运行出错了,请看图
![]()
![]()
![]()
这个程序是用来做一个随手指移动的小球的,请问该怎么修改
你的DrawView是通过layout下的xml来声明出来的,所以会提示这个错误。
如果是在xml中声明自定义View,那么自定义View就必须覆写
public DrawView(Context context, AttributeSet attrs ) {
super(context,attrs);
}
构造方法。
所以解决办法有两种:
1) 加入上面的构造方法。
2) 把DrawView自己创建。
例如:
draw = new DrawView(this);
setContentView(draw);
后面继续写你的其他代码,而不需要findViewById取得draw对象
- 追问
-
现在刚学android,还是尽量先从布局添加组件做起,我已经通过重写构造方法修改了这个程序,但是我不明白为什么这个构造方法要这样写,那我以后再自己定义组件,是不是还是这样写?里面的参数应该是几个?就像二楼他给出的构造方法有三个参数的。。而且我现在刚学,经常通过Alt加/来提示,但是这个却没有提示。。。。新手上路,问题较多,甚至有点幼稚,,还请你多教我。
- 回答
-
View类有三个构造方法,你在继承时,至少要覆写其中一个,以便创建你的自定义View。
这三个构造方法分别是一个参数,两个参数和三个参数的。
一个参数的:在自己new对象建立此View时调用,也就是上面的new DrawView(this)这种。
二个参数的:在xml中声明自定义View时调用,就是在main.xml里声明了<xx.xx.DrawView>这种
三个参数的:也是在XML中声明自定义View时调用,但与两个参数的区别是这个加入了Style样式的引用,也就是说,如果你的 main.xml里<xx.xx.DrawView>中加入了style="@style/xxx.xml",就会调用这个三参的方法。
综合以上所说的,如果三个构造方法都覆写,那么你的自定义View怎么建立都行。
如果只想通过java程序代码建立,那么只需要覆写一个参数的。
如果只想通过XML建立,那么需要覆写两个参数的,如果XML建立还想带样式,那么就必须同时覆写三个参数的构造方法了。
- 提问者评价
-
非常感谢,,说的很详细我也弄明白 了
本文转载自:百度知道。