【问题标题】:Modifying a Preference value in PreferenceActivity has no effect before Activity is closed在 Activity 关闭之前修改 PreferenceActivity 中的 Preference 值没有效果
【发布时间】:2018-08-24 18:32:40
【问题描述】:

我只是想在打开 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);

现在将强制更新首选项,但这真的很脏,我还是不明白...

【问题讨论】:

  • 您每次打开活动时都将值覆盖为 currentTimeMillis/1000?
  • 是的,只是一个例子,编辑一个首选项,应用,然后点击首选项,旧值显示在弹出窗口中,直到重新启动活动
  • 请分享完整的代码,以便更好地了解发生了什么

标签: android sharedpreferences preferenceactivity


【解决方案1】:

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

  1. Activity 创建时onActivityCreated(@Nullable Bundle savedInstanceState)

    1. addPreferencesFromResource() 调用时。有一个处理程序触发bindPreferences()

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

您提到,作为一种解决方法,您应该先更新您的偏好,然后致电 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);
        }

【讨论】:

    猜你喜欢
    • 2012-04-26
    • 1970-01-01
    • 2011-01-20
    • 2022-10-25
    • 2011-05-08
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多