2012-01-02 11 views
43

Il seguente codice genera questo messaggio di errore sulla riga public void onClick.Perché ottengo "deve sovrascrivere un metodo superclasse" con @Override?

multiple marcatori in questa linea
- implementa android.view.View.OnClickListener.onClick
- Il metodo onClick (View) di tipo nuovo View.OnClickListener() {} deve avere la priorità di un metodo della superclasse

Non riesco a capire perché. Questo codice è tratto da numerosi esempi che ho visto. Cosa può essere sbagliato?

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

http://stackoverflow.com/questions/1678122/must-override-a-superclass-method -errori-dopo-importazione-a-progetto-in-eclissi –

risposta

108

Controllare le proprietà e del progetto verificare che Java Compiler -> livello di conformità Compiler è impostato su 1.6.

+10

Grazie! Questo l'ha risolto. Questo è così arcano. Come può un novizio sapere questo tipo di cose ?? –

+0

Tuttavia, ora il programma si blocca con una chiusura forzata - "si è interrotto in modo imprevisto". Wow, è utile. –

+0

Ho commentato l'istruzione setOnClickListener, ma ho lasciato la linea findViewById da sola e si blocca ancora! In che modo il semplice atto di ottenere l'oggetto Button può causare l'arresto imprevisto del programma ?? –

40

Ciò è probabilmente dovuto a un'incompatibilità di livello codice sorgente tra Java 1.5 e 1.6.

  • In Java 5, il @Override annotazioni richiede che il metodo è in realtà override un metodo in una superclasse.

  • In Java 6 e successivamente, l'annotazione @Override sarà anche essere soddisfatta se il metodo sta attuando un metodo astratto in una superclasse o interfaccia.

Quindi la ragione più probabile per vedere questo nel codice che ci si aspetta di lavorare è che si sta compilando Java 6 (o successiva) codice con un Java 5 compilatore (o qualche altro compilatore con livello di conformità sorgente del compilatore impostato su 5).

+7

Grazie per aver effettivamente spiegato * perché * il livello di conformità del compilatore è importante. – Dalbergia

3

Se si imposta il compilatore di 1.6 e ancora ottenere questo errore, prova a controllare le vostre importazioni, perché ciò che Eclipse non è che si cerca sempre di fare questo

import android.content.DialogInterface.OnClickListener 

invece di ->

import android.view.View.OnClickListener 

Questo risolve il mio problema.

0

Mettere un View.onCLickListener() ha risolto il problema. Il mio compilatore Java -> Compilatore livello di COmpliance è già impostato su 1.6, ma stavo ancora avendo lo stesso problema.

Ma cambiare il codice

rdBtn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       onRadioButtonClicked(v); 
      } 
     }); 

a

rdBtn.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       onRadioButtonClicked(v); 
      } 
     }); 

risolto il problema nel mio caso.

2

UTENTI Maven Se stai usando Maven per costruire si possono ignorare le impostazioni eclissi durante la costruzione. Quindi, se si imposta Eclipse su 1.7 ma non si imposta specificatamente la versione di build Maven JDK (che al momento della scrittura è impostata su 1.5), allora il compilatore di eclissi verrà resettato a 1.5. Imposta il compilatore Maven come segue.

<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> 
0

Per me questo è accaduto perché il metodo volevo ignorare era pacchetto privato e ho cercato di ignorare da un pacchetto diverso.

Eclipse sarà inoltre messo un avviso in tal caso che non ho notato a causa di una tonnellata di altri avvertimenti

Problemi correlati