Ich habe eine Klasse, die PreferenceActivity erweitert und den Einstellungsbildschirm meiner App anzeigt. Ist es möglich zu überprüfen, ob Änderungen an den Einstellungen vorgenommen wurden?
Das hilft...
Anderer verwandter Beitrag: SharedPreferences.onSharedPreferenceChangeListener wird nicht konsistent aufgerufen
public class PreferenceClass extends PreferenceActivity {
OnSharedPreferenceChangeListener listener;
public void onCreate(Bundle savedInstanceState) {
SharedPreferences prefs = this.getSharedPreferences("settings", 0);
listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
int flag = 1;
}
};
prefs.registerOnSharedPreferenceChangeListener(listener);
super.onCreate(null);
addPreferencesFromResource(R.xml.settings);
}
}
Antworten:
Tun
SharedPreferences.OnSharedPreferenceChangeListener spChanged = new SharedPreferences.OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { // your stuff here } };
In Ihrer
PreferenceActivity
, dh machen Sie es zu einem Mitglied IhrerPreferenceActivity
Klasse und dannregisterOnSharedPreferenceChangeListener(spChanged)
in derPreferenceActivity.onCreate()
Methode.Das ist was ich tue und ich habe nie ein Problem.
Andernfalls ist Ihre bedingte Überprüfung des Hörers schuld. Geben Sie den Code ein.
BEARBEITEN:
Aus dem von Ihnen veröffentlichten Code sollten Sie
prefs
eine Klassenmitgliedsvariable erstellen, damit sie einen globalen Bereich hat.Und tun Sie dies
prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
stattdessen,getSharedPreferences
weil Sie diese Datei nicht erstellt haben.Um eine Datei zu erstellen, müssen Sie verwenden
PreferenceManager
.PreferenceManager
Verwenden Sie, um eine zu erhaltenActivity.getPreferenceManager()
.quelle
Global
? Plus falscher Code gepostet ... das Bit im Listener.PreferenceActivity
Implementieren Sie in Ihrer Klasse dieSharedPreferences.OnSharedPreferenceChangeListener
Schnittstelle. Fügen SieonSharedPreferenceChanged
Ihrer Klasse die gewünschte Methode hinzu und registrieren Sie sie in deronCreate
.Siehe Beispielcode hier:
public class MyPreferences extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.fw_preferences); //deprecated PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { // handle the preference change here } }
quelle
addPreferencesFromResource(R.xml.fw_preferences); //deprecated
OnSharedPreferenceChangeListener
und Register Listener einonResume
undonPause