【问题标题】:Preference has wrong value when rebuilding PreferenceFragment重建 PreferenceFragment 时首选项的值错误
【发布时间】:2015-03-07 14:41:07
【问题描述】:

我在我的 Preference Fragment 的 onCreate 方法中创建了几个 Color Picker 首选项(从 Preference 扩展)。

颜色选择器描述当前处于活动状态的设计。因此,当用户选择一个新设计(在同一个 PreferenceFragment 中)时,所有颜色选择器都必须根据新设计进行更改。

为此,我正在获取当前设计的新颜色值并重建 PreferenceFragment

public static void RebuildSettings() {

colorFieldList = GetNewColorFields();

if (mPrefsFragment != null) {

    mPrefsFragment.onDestroy();
    mPrefsFragment.onCreate(null);

} else Log.i(Patterns.TAG, "mPrefsFragment = null");

}

在我的 Preference Fragment 的 onCreate 方法中,然后我从 colorFieldList 重新创建颜色字段(使用新设计的颜色),如下所示:

public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

    [...]

PreferenceCategory colorSettings = (PreferenceCategory) findPreference("prefCat_ColorSettings");

    for (int i = 0; i < colorFieldList.size(); i++) {

        AmbilWarnaPreference colorPicker = new AmbilWarnaPreference(getActivity(), null);
        colorPicker.forceSetValue(colorFieldList.get(i).color);
        colorPicker.setTitle(colorFieldList.get(i).name);
        colorPicker.setSummary("Set color in " + colorFieldList.get(i).name);
        colorPicker.setKey("colorField" + colorFieldList.get(i).index);
        colorPicker.setOnPreferenceChangeListener(colorListener);

        if (colorSettings != null)
            colorSettings.addPreference(colorPicker);

    }

    [...]
}

现在我可以更改设计,颜色字段将根据新设计正常更新但仅当我尚未更改任何颜色选择器字段时。 字段按应有的方式更改,但一旦我更改颜色字段/选择新颜色,此字段将永远保持我选择的颜色,尽管每次设计完成时我都会完全重建设置变了!

我错过了什么?为什么只要没有值保存到 SharedPreferences (?) 但之后不保存,颜色就会更新?

我猜 android 总是从共享偏好设置中获取颜色选择器的值,但我如何在 OnCreate 中覆盖它以描绘所选设计的颜色?

非常感谢您的帮助!谢谢!

【问题讨论】:

  • 没人知道吗? :-/

标签: java android oncreate rebuild preferencefragment


【解决方案1】:

我想通了:就像我认为问题在于项目总是收到其特定键的默认值。

要覆盖此行为,我必须在我的偏好片段的 onCreate() 方法中的编辑器上调用 Apply()(我猜提交也可以),如下所示:

getPreferenceManager().getSharedPreferences().edit().putInt("colorField" + colorFieldList.get(i).index, colorFieldList.get(i).color).apply();

(我在上面发布的循环中执行了此操作,因此每个颜色首选项在创建时都被分配给具有覆盖首选项值的新颜色)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多