В моем приложении есть настройки, которые я позволяю пользователю манипулировать, используя PreferenceScreen
с Preference
s. Однако я хочу сохранить настройки на сервере, чтобы настройки могли сохраняться на нескольких устройствах. У меня есть следующий код, который позволяет мне сделать это:
private void updateSettingOnPrefChange(final Preference pref, final Setting setting) {
pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, final Object newValue) {
try {
setting.update(newValue, new Callback<Boolean>() {
@Override
public void call(Boolean succeeded) {
if (!succeeded) {
Toast.makeText(getActivity(), "Setting failed to update. Please try again.", Toast.LENGTH_LONG).show();
//here I need to revert the value of the Preference without again calling the onChangeListener
}
}
}, getActivity());
} catch (Exception ex) {
if (BuildConfig.DEBUG)
ex.printStackTrace();
Toast.makeText(getActivity(), "Setting failed to update. Please try again.", Toast.LENGTH_LONG).show();
return false;
}
return true;
}
});
}
Как видно из кода, запрос выполняется в другом потоке с использованием пользовательского класса Callback
для очистки на основе результата вызова. Проблема в том, что код уже вернет true в главном потоке.
Как я могу вернуть значение Preference
в функции обратного вызова (желательно без вызова функции onPrefChangeListener, чтобы я не получал бесконечную рекурсию)?