【发布时间】:2014-11-01 03:05:32
【问题描述】:
我有一个非常标准的PreferenceFragment 使用
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
prefs = getPreferenceScreen().getSharedPreferences();
}
@Override
public void onResume() {
super.onResume();
prefs.registerOnSharedPreferenceChangeListener(this);
updatePreferences(getPreferenceScreen());
}
@Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
Log.d(TAG, "onSharedPreferenceChanged " + key);
updatePreference(findPreference(key));
}
@Override
public void onPause() {
super.onPause();
prefs.unregisterOnSharedPreferenceChangeListener(this);
}
在 settings.xml 中,我引用了一个 DialogPreference,它看起来像这样:
@Override
protected void onDialogClosed(boolean ok) {
super.onDialogClosed(ok);
if (ok) {
Log.d(TAG, "onDialogClosed OK");
SharedPreferences.Editor editor = settings.edit();
editor.putString(SettingKeys.SOME_KEY, X);
final boolean commit = editor.commit();
Log.d(TAG, "onDialogClosed commit: " + commit);
}
}
但是,我得到以下序列:
onDialogClosed OK
onSharedPreferenceChanged SOME_KEY
onDialogClosed commit: true
这意味着,onSharedPreferenceChanged 事件在最终提交完成之前触发。这意味着我的 PreferenceFragment 无法读取 onSharedPreferenceChanged 处理程序中的最新值......这让我发疯。
有什么建议吗?
【问题讨论】:
标签: android event-handling sharedpreferences commit