OnSharedPreferenceChangeListener не вызывается # 2

Хорошо, я начал реализовывать этот ужасный код с Android от Google. Слушатель OnSharedPreferenceChangeListener не вызывается. Это мой код, не могли бы вы посоветовать?

Определение класса:

private SharedPreferences sPrefs;
private PreferenceChangedListener prefsChangedListener;

У меня есть частный внутренний класс:

private class PreferenceChangedListener implements
        OnSharedPreferenceChangeListener {

    public void onSharedPreferenceChanged(
            SharedPreferences sharedPreferences, String key) {
        if (key == "highThreshold") {
            try {
                highThreshold = Float.parseFloat(sharedPreferences
                        .getString(key, "0"));
            } catch (Exception e) {
            }
        }
    }
}

Попытался использовать следующий код в OnResume и зарегистрировать слушателя после запуска предпочтения «Voorkeuren». Оба терпят неудачу.

sPrefs = getPreferences(MODE_PRIVATE);
prefsChangedListener = new PreferenceChangedListener(); 
sPrefs.registerOnSharedPreferenceChangeListener(prefsChangedListener );

Я определил класс Voorkeuren, который расширяет PreferenceActivity.

public class Voorkeuren extends PreferenceActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_voorkeuren, menu);
        return true;
    }
}

Который я открываю следующим образом:

Intent intent = new Intent(getBaseContext(),Voorkeuren.class);
startActivity(intent);

Класс отображается нормально и сохраняет значения между сеансами. Но мое приложение не должно опрашиваться, если настройки изменились. Есть идеи? У меня есть что-то красное в SharedPreferences.Editor, но я не уверен, как это связано.


person Harmen    schedule 29.11.2012    source источник
comment
Измените ..if (key == highThreshold).. на ..if (key.equals(highThreshold))...   -  person LionKing    schedule 13.06.2013


Ответы (1)


Не уверен, что ваш вопрос и что требуется.

Но есть одно изменение, которое вам нужно сделать. Замените это в onResume

sPrefs = getPreferences(MODE_PRIVATE);
prefsChangedListener = new PreferenceChangedListener(); 
sPrefs.registerOnSharedPreferenceChangeListener(prefsChangedListener );

to

sPrefs = PreferenceManager.getDefaultSharedPreferences(this);;
prefsChangedListener = new PreferenceChangedListener(); 
sPrefs.registerOnSharedPreferenceChangeListener(prefsChangedListener); 

в onCreate()

person PravinCG    schedule 02.12.2012
comment
Да, спасибо :) getPreferences каким-то образом возвращает что-то отличное от getDefaultSharedPreferences(this). Я заставил его работать и с исходным внутренним классом. - person Harmen; 02.12.2012