2011-01-21 9 views
19

Kiedy starałem się użyć tego kodu, aby umożliwić preferencje w moim appbłąd adnotacja @Override (android prefs)

import android.app.Activity; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.preference.Preference; 
import android.preference.PreferenceActivity; 
import android.preference.Preference.OnPreferenceClickListener; 
import android.widget.CheckBox; 
import android.widget.CompoundButton; 
import android.widget.RadioButton; 
import android.widget.Toast; 
import android.widget.CompoundButton.OnCheckedChangeListener; 


public class Preferences extends PreferenceActivity { 

private RadioButton btn01; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.preferences); 
    btn01 = (RadioButton)findViewById(R.id.RadioButton01); 
    Preference customPref = (Preference) findPreference("customPref"); 

    customPref.setOnPreferenceClickListener(new OnPreferenceClickListener(){ 

     public boolean onPreferenceClick(Preference preference) { 
      Toast.makeText(getBaseContext(),"The Custom Preference Has Been Clicked",Toast.LENGTH_LONG).show(); 
      SharedPreferences customSharedPreference = getSharedPreferences("myCutomSharedPrefs", Activity.MODE_PRIVATE); 
      SharedPreferences.Editor editor = customSharedPreference.edit(); 
      editor.putString("myCustomPref","The preference has been clicked"); 
      editor.commit(); 
      return true; 
     } 


     public void CheckBox() { 
      final CheckBox ThisCheckBox = (CheckBox) findViewById (R.id.checkboxPref); 
      ThisCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener(){ 
       @Override 
       public void onCheckedChanged(CompoundButton compoundButton,boolean test) { 
        if (ThisCheckBox.isChecked()){ 
         btn01.setVisibility(0); 
        } else { 
         btn01.setVisibility(2); 
        } 
       } 
      }); 
     }; 
    }); 
} 
} 

generowany jest błąd na tej linii

public void onCheckedChanged(CompoundButton compoundButton,boolean test) { 

mówiąc:

Multiple markers at this line 
- The method onCheckedChanged(CompoundButton, boolean) of type new 
CompoundButton.OnCheckedChangeListener(){} must override a superclass method 
- implements 
android.widget.CompoundButton.OnCheckedChangeListener.onCheckedChanged 

Jeśli usuniemy adnotację @Override, kod nie zadziała, a ostrzeżenie poinformuje mnie, że ta część kod nie jest używany lokalnie.

Po tym, jak przeszedłem przez kogoś i zdumiewałem ich, zastanawiałem się, czy mógłbyś pomóc?

Czy są jakieś typowe scenariusze, które powodują ten błąd?

myślałem, że to może być mój projekt utworzenia

Dzięki

Odpowiedz

18

Jest to rzecz realizacji. W Java 5 vs Java 6 zmieniono, czy można użyć "Override" z interfejsem (ponieważ Override wydaje się sugerować, że nadpisujesz jakieś domyślne zachowanie, którego nie robisz z interfejsem!). Jeśli chcesz, możesz wyszukać w preferencjach Eclipse i zmienić go z błędu kompilacji na ostrzeżenie kompilacji. Kodowanie wewnątrz funkcji CheckBox() wygląda dobrze dla mnie.

Jednak użytkownik nigdy nie wywołuje funkcji CheckBox, więc stąd pochodzi błąd "nie używany lokalnie". Czy chcesz wywołać tę funkcję z metody OnPreferenceClick?

+0

WOW man! wielkie dzięki. Ok, więc jak i gdzie mam zadzwonić do tej metody, jeśli ma być używana lokalnie? – Jack

+0

Od wewnątrz metody onPreferenceClick jest jednym ze sposobów na to. Po editor.commit() dodaj połączenie do CheckBox(); – Hamy

+4

Wystarczy zmodyfikować od 1,5 do 1,6 w swoim YourProject-> RightClick-> Properties-> Java Compiler-> 1.5, to 1.6. Zastosuj i Tak, aby odbudować. – Siddharth

49

Możesz przejść do Ustawienia projektu -> Kompilator Java i zmienić poziom zgodności kompilatora na 1.6. Muszę to zrobić za każdym razem, gdy importuję istniejący projekt.

+0

tak, to działa dla mnie. – anticafe

+0

Zmieniłem "Compiler Compliance z 1.5 na 1.6 i działało. dzięki –