Får inte onSharedPreferencesChangedListener att fungera

Diskussion i 'Frågor, support och diskussion' startad av Sigma78, 8 dec 2010.

  1. Sigma78

    Sigma78 Teen Droid Medlem

    Blev medlem:
    27 jul 2010
    Inlägg:
    360
    Mottagna gillanden:
    6

    MINA ENHETER

    Jag har slitit mitt hår i över en dag nu för att få onSharedPreferencesListener att fungera. Kan någon vänlig själ försöka hjälpa mig?

    Min kod ser ut så här. Vad har jag missat som gör att den inte fungerar? Värdena skrivs korrekt, men Listenerfunktionen kallas aldrig.

    I "lyssnarklassen":
    SharedPreferences settings;
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    final Activity activity = this;

    settings = getSharedPreferences("Settings", 0);
    settings.registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener() {
    public void onSharedPreferenceChanged(SharedPreferences settings,
    String key) {
    Log.d("hej", "onSharedPreferenceChanged " + key);
    Toast.makeText(FirstTab.this, "OnSharedPreferences körs",
    Toast.LENGTH_SHORT).show();
    }
    });

    Från huvudklassen:
    private void setPreferences(String var, String value) {
    settings = getSharedPreferences("Settings", 0);
    SharedPreferences.Editor editor = settings.edit();
    editor.putString(var, value);
    boolean commited = editor.commit();
    Log.d("hej", "commited " + commited);
    }

    Edit: Felet löst! Berodde på någon specialare, men implementerat på ett annat sätt fungerade det.
     
    Last edited: 8 dec 2010
  2. woody

    woody Teen Droid Medlem

    Blev medlem:
    3 sept 2009
    Inlägg:
    319
    Mottagna gillanden:
    19

    MINA ENHETER

    Vad var lösningen?

    Vill minnas att man inte bör använda anonyma klasser till registerOnSharedPreferenceChangeListener då risken finns att skräpsamlaren tar bort det objektet.
     
  3. Sigma78

    Sigma78 Teen Droid Medlem

    Blev medlem:
    27 jul 2010
    Inlägg:
    360
    Mottagna gillanden:
    6

    MINA ENHETER

    Precis så var det :)

    Lösningen som jag fick av en kollega (hade nog aldrig kommit på det själv):
    public class FirstTab extends Activity implements SharedPreferences.OnSharedPreferenceChangeListener{

    Oncreate(){

    settings = getSharedPreferences("Settings", 0);
    settings.registerOnSharedPreferenceChangeListener(this);

    }

    public void onSharedPreferenceChanged(SharedPreferences settings, String key){
    Toast.makeText(FirstTab.this, "OnSharedPreferences körs",Toast.LENGTH_SHORT).show();
    }
    }