Le code suivant génère ce message d'erreur à la ligne public void onClick
.
Plusieurs marqueurs à cette ligne
- implémente Android.view.View.OnClickListener.onClick
- La méthode onClick (View) de type new View.OnClickListener () {} doit remplacer une méthode de superclasse
Je ne comprends pas pourquoi. Ce code est tiré de nombreux exemples que j'ai vus. Qu'est-ce qui peut éventuellement être faux?
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);
}
}
});
}
Vérifiez les propriétés du projet et vérifiez que Compilateur Java -> Niveau de conformité du compilateur est défini sur 1.6 .
Ceci est probablement dû à une incompatibilité de code source entre Java 1.5 et 1.6.
En Java 5, l'annotation @Override
nécessite que la méthode remplace en réalité une méthode dans une superclasse.
Dans Java 6 et les versions ultérieures, l'annotation @Override
sera également / satisfaite si la méthode implémente une méthode abstraite dans une superclasse ou une interface.
Ainsi, la raison la plus probable pour voir cela dans le code que vous comptez utiliser est que vous compilez du code Java 6 (ou version ultérieure) avec un compilateur Java 5 (ou un autre compilateur avec le niveau de conformité source du compilateur défini sur 5).
Si vous définissez le compilateur sur 1.6 et obtenez toujours cette erreur, essayez de vérifier vos importations, car Eclipse essaie toujours de le faire.
import Android.content.DialogInterface.OnClickListener
au lieu de ->
import Android.view.View.OnClickListener
Cela résout mon problème.
MAVEN USERS Si vous utilisez Maven pour la construction, il peut remplacer les paramètres Eclipse lors de la construction. Ainsi, si vous définissez Eclipse sur 1.7 mais que vous ne définissez pas spécifiquement la version de compilation Maven JDK (qui par défaut était définie sur 1.5), le compilateur cible Eclipse sera réinitialisé sur 1.5. Définissez le compilateur Maven comme suit.
<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>
Mettre un View.onCLickListener () m'a résolu le problème. Mon compilateur Java -> Le niveau de compilateur du compilateur est déjà défini sur 1,6, mais je rencontrais le même problème.
Mais changer le code
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);
}
});
résolu le problème dans mon cas.
Pour moi, cela s’est produit parce que la méthode que je voulais remplacer était package private et j’ai essayé de le remplacer à partir d’un autre package.
Eclipse mettra en outre un avertissement dans ce cas que je n'ai pas remarqué à cause d'une tonne d'autres avertissements