刚学android,遇到一个问题不知道怎么解决,编译没错,运行出错了,请看图

这个程序是用来做一个随手指移动的小球的,请问该怎么修改... 这个程序是用来做一个随手指移动的小球的,请问该怎么修改 展开
 我来答
匿名用户
2013-08-21
展开全部

缺少 DrawView 的构造函数。

在DrawView类里添加

public DrawView(Context context, AttributeSet attrs ) { 
    super(context,attrs);
}

public DrawView(Context context, AttributeSet attrs , int defStyle) { 
    super(context,attrs);
}

 就不会出这个错误了。

追问
请问我写的一个参数的构造器为什么不对,一定要写
public DrawView(Context context, AttributeSet attrs ) {
super(context,attrs);
}才行,
,而且你这个有必要写三个参数的构造器吗?,我经常用ALt加/来提示下面该怎么做,但是这个完全没有提示,新手问题多,还请你多教我。
wang20064412
2013-08-21 · TA获得超过219个赞
知道小有建树答主
回答量:149
采纳率:66%
帮助的人:83.5万
展开全部
看你的log日志 ,是因为装载xml文件出错的,你看下main.xml中引用的DrawView路径多不对,引用的时候应该是 "DrawView所在的包名.DrawView" 这样引用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ヤマザキ266e77
推荐于2016-02-26 · TA获得超过2052个赞
知道小有建树答主
回答量:721
采纳率:0%
帮助的人:987万
展开全部
你的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里声明了这种
三个参数的:也是在XML中声明自定义View时调用,但与两个参数的区别是这个加入了Style样式的引用,也就是说,如果你的 main.xml里中加入了style="@style/xxx.xml",就会调用这个三参的方法。

综合以上所说的,如果三个构造方法都覆写,那么你的自定义View怎么建立都行。
如果只想通过java程序代码建立,那么只需要覆写一个参数的。
如果只想通过XML建立,那么需要覆写两个参数的,如果XML建立还想带样式,那么就必须同时覆写三个参数的构造方法了。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式