gpt4 book ai didi

Android onSharedPreferenceChanged 在提交完成之前触发

转载 作者:行者123 更新时间:2023-11-29 00:17:19 26 4
gpt4 key购买 nike

我有一个非常标准的 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. 然后你得到你的编辑器,设置一些 key
  3. 您正在调用 editor.commit()。 When a shared preference is changed, added, or removed , onShared onSharedPreferenceChanged() 被触发,然后打印你的第二行:“onSharedPreferenceChanged SOME_KEY”。
  4. 剩余的行在提交后打印“onDialogClosed commit: true”

关于Android onSharedPreferenceChanged 在提交完成之前触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25715044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com