提交完成前触发了Android onSharedPreferenceChanged



我有一个使用的非常标准的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处理程序中的最新值。。。这让我很生气。

有什么建议吗?

除非我遗漏了什么,否则您的序列实际上是正确的:

  1. "onDialogClosed OK"是第一次打印输出
  2. 然后你得到你的编辑器,设置一些关键
  3. 您正在调用editor.commit()。当共享首选项被更改、添加或删除时,会触发onShared onSharedPreferenceChanged(),然后打印您的第二行:"onSharedPreference changed SOME_KEY"
  4. 在提交之后,剩下的一行打印为"onDialogClosed-commit:true"

相关内容

  • 没有找到相关文章

最新更新