3

我有许多首选项,我想将它们重置为我的首选项 xml 文件中指定的默认值。

我不想重置我的所有偏好 - 只是一些选择的。

我试过了:

key=getResources().getString(R.string.myPref);
sharedPreferences.edit().remove(key).commit();

这将清除首选项。但是,当我的程序然后尝试选择偏好时

String myPref = sharedPreferences.getString(key, "");

它只返回空字符串。

如何从 XML 文件中获取值?

谢谢

添加我一直在调试的更完整的代码示例:

//Get preferences
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(activity);

//Get preference key
key=getResources().getString(R.string.myPref);

//Get preference value
String myPref = sharedPreferences.getString(key, ""); // Returns a value that has been entered by a user

//Clear preference
sharedPreferences.edit().remove(key).commit();

//Reset preferences to default values - without overwritting all
PreferenceManager.setDefaultValues(currentContext, preferences, false);

//Get preference value again
String myPref = sharedPreferences.getString(key, ""); // Returns an empty string
4

3 回答 3

2

Try PreferenceManager.setDefaultValues(this, R.xml.preferences, false); This is save as last parameter 确保用户更改的条目不会被覆盖。

于 2013-01-30T11:06:31.623 回答
1

getDefaultSharedPreferences(Context).setDefaultValues(this, R.xml.preference, true);

请务必将最后一个参数readAgain设置为true

这将强制重新读取默认值。如果为 false,则仅当过去从未调用过此方法(或者默认值共享首选项文件中的 KEY_HAS_SET_DEFAULT_VALUES 为 false)时,此方法才设置默认值。要尝试绕过此检查再次设置默认值,请将 readAgain 设置为 true。

于 2013-01-30T11:07:20.997 回答
1

我意识到这个问题有点老了,但希望这个答案可以帮助未来的观众。它真的帮助了我。

引用答案:

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

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

如果您有 PreferenceFragment,您可以使用PreferenceFragment.findPreference().

如果您有 PreferenceActivity,您可以使用PreferenceActivity.findPreference().

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


我的个人适应:

注意:我在 PreferenceFragment 扩展类中使用它,因此this.getActivity().

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this.getActivity());
preferences.edit().remove(getResources().getString(R.string.pref_username)).apply();
EditTextPreference usernamePref = (EditTextPreference) findPreference(getString(R.string.pref_username));
usernamePref.setText("");

希望能帮助到你!

于 2017-02-23T11:48:35.127 回答