74 votes

Pourquoi est-ce que je reçois "doit remplacer une méthode de super-classe" avec @Override?

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);
            }
        }
    });
}
 

172voto

dtmilano Points 26472

Vérifiez les propriétés du projet et vérifiez que le niveau de conformité du compilateur Java -> Compilateur est 1.6 .

57voto

Stephen C Points 255558

Ceci est probablement dû à un code source d'incompatibilité entre Java 1.5 et 1.6.

  • En Java 5, l' @Override d'annotation exige que la méthode est en fait du remplacement d'une méthode dans une super-classe.

  • Dans la version 6 de Java, l' @Override annotation également être remplie si la méthode est mise en œuvre une méthode abstraite dans une super-classe ou de l'interface.

Donc, la raison la plus probable pour voir ce dans le code que vous pouvez vous attendre à travailler, c'est que vous êtes de la compilation de la version 6 de Java code avec un compilateur Java 5 (ou un autre compilateur avec le compilateur de la source niveau de conformité défini à 5).

4voto

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.

0voto

Amogh Natu Points 99

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 toujours 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X