下面是我在保存设置功能(DialogFragment)中使用的一段代码:
String orderBy = mOrderBySpinner.getSelectedItem().toString();
String search = mSearchEditText.getText().toString().trim();
SharedPreferences sharedPreferences = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(InventoryPreferences.ORDER_BY, orderBy);
editor.putString(InventoryPreferences.SEARCH_TERM, search);
editor.apply();
然后我使用以下(活动)检索该数据:
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
String orderBy = sharedPrefs.getString(InventoryPreferences.ORDER_BY, "name ASC");
String searchTerm = sharedPrefs.getString(
InventoryPreferences.SEARCH_TERM,"").trim();
这些是我的钥匙:
public static final String ORDER_BY = "orderBy";
public static final String SEARCH_TERM = "search";
当密钥相同时,是否有任何理由不更新值?
答案 0 :(得分:2)
getActivity().getPreferences(Context.MODE_PRIVATE);
不是
PreferenceManager.getDefaultSharedPreferences(this);
在两种方法中使用第二行。
来自文档: https://developer.android.com/reference/android/app/Activity.html#getPreferences(int)
检索SharedPreferences对象以访问其中的首选项 此活动的私人信息
答案 1 :(得分:1)
您使用两种不同的方法来访问SharedPreferences
文件。
第一次使用getActivity().getPreferences(Context.MODE_PRIVATE)
时,您调用Activity getPreferences(int mode)
,它返回一个SharedPreferences对象,该对象应该是请求它的活动的私有对象。此SharedPreferences对象指向的首选项文件的名称是CLASS_NAME.xml
第二次使用PreferenceManager.getDefaultSharedPreferences(this)
返回一个SharedPreferences对象,该对象应该对整个应用程序可用且有用。此SharedPreferences对象指向的首选项文件的名称为PACKAGE_NAME_preferences.xml。
所以你的问题是你正在使用一个文件来编写首选项而另一个文件来阅读它们。尝试使用更全局的思维PreferenceManager.getDefaultSharedPreferences(Context context)
来存储与整个应用程序相关的首选项,并仅将Activity.getPreferences(int mode)
用于仅与特定活动相关的首选项。 (然后还记得使用适当的方法来检索它们)
答案 2 :(得分:0)
使用PreferenceManager
访问SharedPreference。
答案 3 :(得分:-1)
您更新偏好值的代码是正确的。
考虑验证输入控件中的值是否真的发生了变化 并验证应用程序是否有权写入首选项。