【问题标题】:Updating preferences in real time实时更新偏好
【发布时间】:2011-09-29 21:31:51
【问题描述】:

我有一个首选项屏幕,其中有一些相互关联的首选项。这意味着,如果我有首选 xy,我有时需要在 x 更改时将 y 更改为某些内容。

我现在正在做的是听首选项更改事件,然后这样做:

SharedPreferences.Editor editor = prefs.edit();
editor.putString("y_pref", "somevalue");
editor.commit();

问题是,要真正看到更改,我必须先关闭首选项屏幕然后再次打开它,这样我才能看到新设置的首选项。

有没有办法更改首选项,使更改立即可见,而无需重新加载首选项屏幕?

【问题讨论】:

    标签: android android-preferences


    【解决方案1】:

    尝试调用首选项本身的设置器,而不是自己更新它:

    例如EditTextPreference.setText().所以偏好本身也会更新它自己的价值。如果您自己进行更新,则首选项将不会获取新值,因为它甚至不知道持久值已更改。

    如果您有PreferenceFragment,您可以通过PreferenceFragment.findPreference() 获得偏好。

    如果您有PreferenceActivity,您可以通过PreferenceActivity.findPreference() 获得偏好。

    您使用您在设置 XML 文件中分配的首选项键调用它,并获得相应首选项的实例。然后将其转换为 CheckBoxPreferenceEditTextPreference 等(您在 XML 文件中设置的类型)。

    【讨论】:

    • 我会尝试的,但我如何获得我需要的 pref 元素的实例? (即ListPreferenceCheckBoxPreference 等)thanx
    • 非常抱歉,我的速度很慢。我试图搜索它,但没有发现关于如何从 prefschange 监听器类中获取 prefs 元素的实例。
    • 您使用的是PreferenceActivity,对吗?这有我在回答中提到的方法。
    • 有点晚了(晚了8年lol),但是我想问一下,我们应该在哪个Override方法下创建这个函数?我的意思是它应该在onCreate下吗?或 onCreatePreferences?还是 onResume?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 2011-12-09
    相关资源
    最近更新 更多