以下代码在 public void onClick
行生成此错误消息 .
此行中有多个标记 - 实现android.view.View.OnClickListener.onClick - 新类型View.OnClickListener(){}的onClick(View)方法必须覆盖超类方法
我不明白为什么 . 这段代码来自我见过的众多例子 . 什么可能是错的?
private Button audioButton;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
audioButton = (Button) findViewById(R.id.imageButton1);
audioButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View button) {
if (button.isSelected()) {
button.setSelected(false);
}
else {
button.setSelected(true);
}
}
});
}
7 回答
检查项目的属性并验证 Java Compiler -> Compiler compliance level 是否设置为 1.6 .
这很可能是由于Java 1.5和1.6之间的源代码级别不兼容 .
在Java 5中,
@Override
注释要求该方法实际上覆盖超类中的方法 .在Java 6及更高版本中,如果方法在超类或接口中实现抽象方法,则也将满足
@Override
注释 .因此,在您期望工作的代码中看到这一点的最可能的原因是您正在使用Java 5编译器(或编译器的源合规性级别设置为5的其他编译器)编译Java 6(或更高版本)代码 .
如果将编译器设置为1.6并仍然出现此错误,请尝试检查导入,因为Eclipse的作用是它始终尝试执行此操作
而不是 - >
这解决了我的问题 .
MAVEN USERS 如果你专门设置了Maven JDK构建版本(在编写本文时默认为1.5),那么它会将eclipse目标编译器重置为1.5 . 如下设置Maven编译器 .
放一个View.onCLickListener()解决了我的问题 . 我的Java编译器 - >编译器COmpliance级别已设置为1.6,但我仍遇到同样的问题 .
但是改变代码
至
解决了我的问题 .
对我来说,这发生了,因为我想覆盖的方法是 package private ,我试图从另一个包覆盖它 .
Eclipse会另外发出一个警告,因为有很多其他警告,我没有注意到
现在是2018年!为便于参考,请参见下面的截图 .