gpt4 book ai didi

android - 在 PreferenceActivity 中修改 Preference 值在 Activity 关闭之前没有效果

转载 作者:太空狗 更新时间:2023-10-29 13:50:02 24 4
gpt4 key购买 nike

我只是想在 PreferenceActivity 打开时更改 Preference 的值。由于首选项上没有“setValue”或类似内容,我尝试

我的代码:

long value = System.currentTimeMillis()/1000;
PreferenceManager.getDefaultSharedPreferences(getActivity()).edit().putString("test",""+value).apply();
getPreferenceScreen().findPreference("test").setSummary(""+value);

我的 XML:

<EditTextPreference
android:key="test" />

我的期望:

当点击我的首选项时,它应该显示时间值(与摘要相同)并让我编辑它。

发生了什么:

该值仅在我关闭 Activity 后才发生变化。下次我打开屏幕时,该值是正确的(但实际上已经更改为下一个)

第一次尝试:假设值为 1521143527。在摘要中正确写入,但是当我单击“首选项”时,弹出窗口显示一个空值。

第二次尝试:Summary 已更改为 1521143540。当我单击 Preference 时,我可以编辑以前的值 (1521143527)

第三次尝试:新摘要,但首选项值没有改变,仍然是:1521143540

等...

知道哪里出了问题吗?

肮脏的解决方法:

    setPreferenceScreen(null);
addPreferencesFromResource(R.xml.preferences);

现在会强制更新偏好,但这真的很脏,我还是不明白......

最佳答案

如果您查看 PreferenceFragment源代码,你可以看到有一个名为 bindPreferences() 的方法,它将偏好值绑定(bind)到 Views 。仅在 2 种情况下调用此方法,

  1. When Activity created onActivityCreated(@Nullable Bundle savedInstanceState)

    1. When addPreferencesFromResource() called. there is a handler which triggers the bindPreferences()

除此之外,无法更新 View 。 bindPreferences() 是一个私有(private)方法,所以你不能在类之外调用这个方法。因此,您应该在这些事件之前更新您的偏好。

您提到,作为变通解决方案,您应该先更新您的首选项,然后调用 addPreferencesFromResource()。如下图

     @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
long value = System.currentTimeMillis()/1000;
getPreferenceManager().getSharedPreferences().edit().putString("test",""+value).commit();
addPreferencesFromResource(R.xml.pref_general);
getPreferenceScreen().findPreference("test").setSummary(""+value);
}

关于android - 在 PreferenceActivity 中修改 Preference 值在 Activity 关闭之前没有效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49308069/

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