J'ai une classe qui étend PreferenceActivity et affiche l'écran des préférences de mon application. Est-il possible de vérifier si des modifications ont été apportées aux préférences?
CA aide...
Autre article lié: SharedPreferences.onSharedPreferenceChangeListener n'étant pas appelé de manière cohérente
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);
}
}
Faire
SharedPreferences.OnSharedPreferenceChangeListener spChanged = new
SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
// your stuff here
}
};
Dans votre PreferenceActivity
, c.-à-d. En faire un membre de votre classe PreferenceActivity
puis faites registerOnSharedPreferenceChangeListener(spChanged)
dans la méthode PreferenceActivity.onCreate()
.
C'est ce que je fais et je n'ai jamais de problème.
Sinon, c'est votre vérification conditionnelle dans l'auditeur qui est en cause. Postez le code.
MODIFIER:
A partir du code que vous avez publié, vous devriez faire de prefs
une variable de membre de classe afin qu'elle ait une portée globale.
Et faites prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
au lieu de getSharedPreferences
parce que vous n'avez pas créé ce fichier.
Pour créer un fichier, vous devez utiliser PreferenceManager
. Pour obtenir un PreferenceManager
, utilisez Activity.getPreferenceManager()
.
Dans votre classe PreferenceActivity
, implémentez le SharedPreferences.OnSharedPreferenceChangeListener
interface. Ajoutez la méthode onSharedPreferenceChanged
requise à votre classe et enregistrez-la dans le fichier onCreate
.
Voir exemple de code ici:
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
}
}