我在Android guide的分步指南后面使用了偏好片段。
我正在尝试使用此片段设置一些首选项,因此稍后在代码中我可以检查每个变量的值以执行操作。
Mi Preference片段工作正常。但是,当我尝试在代码的其他地方恢复CheckedBoxPreference的值时,它总是返回false。
这是首选项xml文件:
```{r}
results <- someFun("ice cream", 10)
```
这是我使用SharedPReferences
所做的课程<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:persistent="true"
>
<PreferenceCategory
android:title="NOTIFICACIONES"
android:key="pref_key_storage_settings">
<CheckBoxPreference
android:key="sendMail"
android:defaultValue="false"
android:persistent="true"
android:summary="Send emails to contacts"
android:title="E-mail"/>
</PreferenceCategory>
</PreferenceScreen>
这就是我检查选项是否被选中的方式,因此我可以向客户发送/不发送电子邮件
public class Prefs{
private static Prefs myPreference;
private SharedPreferences sharedPreferences;
private static final String NOMBRE_PREFERENCIAS = "MisPreferencias";
public static Prefs getInstance(Context context) {
if (myPreference == null) {
myPreference = new Prefs(context);
}
return myPreference;
}
private Prefs(Context context) {
sharedPreferences = context.getSharedPreferences(NOMBRE_PREFERENCIAS,context.MODE_PRIVATE);
}
public Boolean getBoolean(String key)
{
boolean returned = false;
if (sharedPreferences!= null) {
returned = sharedPreferences.getBoolean(key,false);
}
return returned;
}
}
正如我所说,奇怪的是它在设置片段上是持久的(如果我选择sendEmmail选项,即使我关闭应用程序并重新打开它也会被选中。但是,当我使用my方法检查值时,它总是返回false。
我做错了什么?
谢谢
答案 0 :(得分:3)
由于您使用的是偏好片段,因此您应该使用PreferenceManager.getDefaultSharedPreferences(android.content.Context)
来检索您的偏好设置。您目前正在使用命名偏好设置。
来自developer.android.com on PreferenceFragment:
将Preference对象的层次结构显示为列表。这些偏好 将在用户交互时自动保存到SharedPreferences 跟他们。要检索的是SharedPreferences的实例 此片段中的首选项层次结构将使用,调用 带有上下文的getDefaultSharedPreferences(android.content.Context) 与此片段相同的包。
所以行
sharedPreferences = context.getSharedPreferences(NOMBRE_PREFERENCIAS,context.MODE_PRIVATE);
应替换为:
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);