Ответ 1
Проверьте свойства проекта и убедитесь, что Компилятор Java → Уровень соответствия компилятора установлен на 1.6.
Следующий код генерирует это сообщение об ошибке в строке public void onClick
.
Несколько маркеров в этой строке
- реализует android.view.View.OnClickListener.onClick
- Метод onClick (View) типа new View.OnClickListener() {} должен переопределить метод суперкласса
Я не понимаю, почему. Этот код взят из многочисленных примеров, которые я видел. Что может быть неправильным?
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);
}
}
});
}
Проверьте свойства проекта и убедитесь, что Компилятор Java → Уровень соответствия компилятора установлен на 1.6.
Это, скорее всего, связано с несовместимостью уровня исходного кода между Java 1.5 и 1.6.
В Java 5 аннотация @Override
требует, чтобы этот метод фактически переопределял метод в суперклассе.
В Java 6 и более поздних версиях аннотация @Override
также будет выполняться, если метод реализует абстрактный метод в суперклассе или интерфейсе.
Таким образом, наиболее вероятная причина видеть это в коде, который вы ожидаете работать, заключается в том, что вы компилируете код Java 6 (или более поздний) с помощью компилятора Java 5 (или другого компилятора с уровнем соответствия источника компилятора, установленным в 5).
Если вы установите компилятор в 1.6 и по-прежнему получите эту ошибку, попробуйте проверить свой импорт, потому что то, что делает Eclipse, заключается в том, что он всегда пытается это сделать
import android.content.DialogInterface.OnClickListener
вместо →
import android.view.View.OnClickListener
Это решает мою проблему.
MAVEN USERS Если вы используете Maven для сборки, он может переопределить настройки eclipse во время сборки. Поэтому, если вы установите Eclipse в 1.7, но специально не устанавливаете версию сборки Maven JDK (которая на момент написания этой статьи по умолчанию равна 1,5), то она будет reset целевым компилятором 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>
Установка View.onCLickListener()
решила проблему для меня. Мой Java Compiler → Compiler Compliance level уже установлен на 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);
}
});
решил проблему в моем случае.
Для меня это произошло потому, что метод, который я хотел переопределить, был закрытый, и я попытался переопределить его из другого пакета.
Eclipse дополнительно добавит предупреждение в этом случае, которое я не заметил из-за тонны других предупреждений
Теперь это 2018! Для получения дополнительной информации см. Снимок экрана ниже.
Если смена компилятора на 1.6 не работает, обновите проект и создайте его.
Это сработало для меня.