以下代码在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);
}
}
});
}
答案 0 :(得分:136)
检查项目的属性并验证 Java编译器 - >编译器合规性级别设置为 1.6 。
答案 1 :(得分:46)
这很可能是由于Java 1.5和1.6之间的源代码级别不兼容。
在Java 5中,@Override
注释要求该方法实际上覆盖超类中的方法。
在Java 6及更高版本中,如果方法在超类或接口中实现抽象方法,则@Override
注释将也。
因此,您希望在代码中看到这一点的最可能原因是您正在使用Java 5编译器(或编译器的源合规性级别设置为5的其他编译器)编译Java 6(或更高版本)代码
答案 2 :(得分:4)
如果将编译器设置为1.6并仍然出现此错误,请尝试检查导入,因为Eclipse的作用是它始终尝试执行此操作
import android.content.DialogInterface.OnClickListener
而不是 - >
import android.view.View.OnClickListener
这解决了我的问题。
答案 3 :(得分:4)
MAVEN USERS 如果你正在使用Maven进行构建,它可以在构建期间覆盖eclipse设置。因此,如果您将Eclipse设置为1.7但没有专门设置Maven JDK构建版本(在撰写本文时默认为1.5),那么它会将eclipse目标编译器重置为1.5。按如下方式设置Maven编译器。
<build>
...
<plugins>
....
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
答案 4 :(得分:0)
放一个View.onCLickListener()解决了这个问题。我的Java编译器 - &gt;编译器的COmpliance级别已设置为1.6,但我仍遇到同样的问题。
但改变代码
rdBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
onRadioButtonClicked(v);
}
});
到
rdBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
onRadioButtonClicked(v);
}
});
解决了我的问题。
答案 5 :(得分:0)
对我来说,这是因为我想覆盖的方法是包私有,我试图从其他包中覆盖它。
Eclipse会另外发出一个警告,因为有大量其他警告,我没有注意到
答案 6 :(得分:0)
答案 7 :(得分:0)
现在是2020年!您应该将符合性更改为1.8!
我尝试将合规性更改为1.6,但是没有用。而且我尝试将其随机更改为其他级别,例如11、12或13,但是它也不起作用。
看了一点之后,我发现了这个主题,它帮助我理解了: What is “compiler compliance level” in Eclipse?
阅读到Java编译器可以编译将在早期JVM版本上运行的代码。我将编译器级别更改为 1.8 ,它确实解决了问题。因此,始终以最高的合规水平为目标!
答案 8 :(得分:0)