Jestem nowy w rozwoju Androida. W mojej aplikacji, gdy użytkownik zmienia preferencję, należy wywołać funkcję, aby zaktualizować niektóre zmienne.Jak wywołać funkcję * po * onPreferenceChange?
To jest mój bieżący kod:
mypref.setOnPreferenceChangeListener(
new OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference arg0, Object arg1) {
if(arg1.toString().matches("...") == false) {
...
return false;
}
...
updateVariables();
return true;
}
});
Problem polega na tym, że gdy updateVariables()
nazywa, wartość preferencji nie jest jeszcze zaktualizowane, a funkcja widzi starą wartość.
private void updateVariables()
{
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
Map<String, ?> savedKeys = sharedPref.getAll();
for (Map.Entry<String, ?> entry : savedKeys.entrySet()) {
// for each preference...
}
}
Jakie jest rozwiązanie najmniej inwazyjne? Dzięki!
dzięki. Ale co jeśli w 'updateVariables()' muszę iterować wiele innych preferencji? Potrzebowałbym wielu różnych argumentów. – danieleds
To tutaj po prostu podaje jedną zmienioną wartość preferencji. Wszystkie pozostałe są takie same, dopóki nie zostanie zwrócone wywołanie zwrotne. Musisz tylko przesłać dalej, wszystkie pozostałe można odczytać, tworząc normalny obiekt 'SharedPreferences'. * (Poza tym możesz nadal używać 'List' jako argumentu, jeśli masz dużo argumentów do przekazania) * –
hmm ... może robię to źle, ale dodałem przykład' updateVariables() '. Jak mogę zrobić cykl, jeśli dodaję dodatkowy argument ze zaktualizowaną wartością? Jak mogę uniknąć przetwarzania tych samych preferencji 2 razy (jeden raz ze starą wartością z SharedPreferences, raz z nową wartością z args)? Mogę myśleć tylko o brudnych rozwiązaniach: S – danieleds