为什么用setOnClickListener(this)报错:in the type View is not applicable for the argume

cancel_li 2010-02-09 11:27:04
我的代码

public class TEST extends Activity {
ImageButton ibutton ;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

initResourceRefs();
}

private void initResourceRefs() {
ibutton = (ImageButton)findViewById(R.id.button);

ibutton.setOnClickListener((OnClickListener) this);
}


public void OnClick(View v) {
if (!v.isEnabled()) {
return;
}

switch (v.getId()) {
case R.id.button:
Log.v("TEST", "on Click");
break;
}
}
}

我的疑问是这样的:
1、为什么用ibutton.setOnClickListener((OnClickListener) this);是可以编译过的,而用ibutton.setOnClickListener(this);报错The method setOnClickListener(View.OnClickListener) in the type View is not applicable for the arguments (TEST);为什么一定要强制转换类型啊?
2、为什么用ibutton.setOnClickListener((OnClickListener) this);语句就不能在虚拟机上运行应用,报异常错误。
但如下写,就可以运行应用程序
private void test func() {
ibutton = (ImageButton)findViewById(R.id.button);

ibutton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.v("TEST", "on Click");
}
});
}
...全文
15638 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
z2633652 2012-05-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

找到方法解决了
用public class TEST extends Activity
implements Button.OnClickListener{
}即可
[/Quote]
Hellow android那本书就是这样说的!
r7746521l 2011-10-14
  • 打赏
  • 举报
回复
我加了下面这个后就好了
public void onClick(View v) {
// TODO Auto-generated method stub

}
[Quote=引用 15 楼 redball2 的回复:]
加入这个implements OnClickListener{ 后 还是会出现这样的错误 The type TestActivity must implement the inherited abstract method View.OnClickListener.onClick(View)。。。。。


求解!
[/Quote]
redball22 2011-10-09
  • 打赏
  • 举报
回复
加入这个implements OnClickListener{ 后 还是会出现这样的错误 The type TestActivity must implement the inherited abstract method View.OnClickListener.onClick(View)。。。。。


求解!
forevervar 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 aixhdwo 的回复:]

大侠,您好,我也碰到了和您同样的问题,并且看到了您的解决方法,但是我不知道原理是神马?大侠可以说说么。我的理解是如果import导入了那个包就不用再实现这个接口了。不过明显我的理解是错的。请大侠解惑。小弟拜谢了。
[/Quote]
我也想知道,而且加了implements Button.OnClickListener以后会发现import进来的包已经属于无效了。希望有大侠能指导一下!
the9di 2011-08-23
  • 打赏
  • 举报
回复
import android.view.View.OnClickListener;
aixhdwo 2011-08-19
  • 打赏
  • 举报
回复
大侠,您好,我也碰到了和您同样的问题,并且看到了您的解决方法,但是我不知道原理是神马?大侠可以说说么。我的理解是如果import导入了那个包就不用implements OnClickListener再实现这个接口了。不过明显我的理解是错的。请大侠解惑。小弟拜谢了。
zgwmy 2011-07-19
  • 打赏
  • 举报
回复
我也刚搞明白,原来不加Button.OnClickListener,直接写OnClickListener它实现的不是Button的那个OnClickListener,所以就会这么纠结。
cancel_li 2010-02-09
  • 打赏
  • 举报
回复
引用 8 楼 gardner2010 的回复:
引用 6 楼 cancel_li 的回复:找到方法解决了用public class TEST extends Activity     implements Button.OnClickListener{ }即可
呵,我刚想问你ImageButton 有没有实现OnClickListener 接口呢


哈,谢谢啊,对java真是一窍不通啊,还云里雾里来.
cancel_li 2010-02-09
  • 打赏
  • 举报
回复
我是才起步学java,以前一直做驱动的.真是对这有点摸不着头脑.希望大家多多指教.
还有谢谢楼上的回复.
小贝壳666 2010-02-09
  • 打赏
  • 举报
回复
引用 6 楼 cancel_li 的回复:
找到方法解决了
用public class TEST extends Activity
    implements Button.OnClickListener{
}即可

呵,我刚想问你ImageButton 有没有实现OnClickListener 接口呢
小贝壳666 2010-02-09
  • 打赏
  • 举报
回复
public static interface
View.OnClickListener
android.view.View.OnClickListener
cancel_li 2010-02-09
  • 打赏
  • 举报
回复
找到方法解决了
用public class TEST extends Activity
implements Button.OnClickListener{
}即可
小贝壳666 2010-02-09
  • 打赏
  • 举报
回复
Class ImageButton
java.lang.Object
org.apache.wicket.Component
org.apache.wicket.MarkupContainer
org.apache.wicket.markup.html.WebMarkupContainer
org.apache.wicket.markup.html.form.LabeledWebMarkupContainer
org.apache.wicket.markup.html.form.FormComponent
org.apache.wicket.markup.html.form.Button
org.apache.wicket.markup.html.form.ImageButton
All Implemented Interfaces:
java.io.Serializable, IClusterable, IConverterLocator, IRequestListener, IResourceListener, IFormSubmittingComponent, IFormVisitorParticipant, ILabelProvider
cancel_li 2010-02-09
  • 打赏
  • 举报
回复
而且只要把这句ibutton.setOnClickListener((OnClickListener) this); 注释掉,就可以跑起应用了。
cancel_li 2010-02-09
  • 打赏
  • 举报
回复
谢谢楼上,但ibutton应该是ImageButton类型.
而我看到其他人的代码好象是可以用setOnClickListener(this)设置,并且应用能跑起来啊.
小贝壳666 2010-02-09
  • 打赏
  • 举报
回复
ibutton.setOnClickListener((OnClickListener) this);中的this表示对象本身,它所指的对像本身就是ibutton,即this=ibutton,而ibutton是TEST类型

setOnClickListener(View.OnClickListener)的参数要求为View.OnClickListener类型,所以要想把ibutton传进去当参数,只能进行强转,这样才能编译通过。但不能运行,因为ibutton本质上是TEST类型,不能当作View.OnClickListener用的。
cancel_li 2010-02-09
  • 打赏
  • 举报
回复
哪位大侠来帮忙解惑呀.

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧