【发布时间】:2014-05-15 09:41:33
【问题描述】:
我有一个 PreferenceFragment,我在 XML 中定义了一个 CheckBoxPreference。我需要在服务中检查这个值,但它总是给我旧值。当我重新启动应用程序时,我注意到该值已正确更改。
我的偏好片段:
public class OptionsFragment extends PreferenceFragment
{
public static final String WIFI_ONLY = "wifi";
private SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MyApplication.getInstance());
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.config);
}
}
我的 config.xml :
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<CheckBoxPreference
android:defaultValue="true"
android:key="wifi"
android:summary="Check if you want to use wifi only"
android:title="Use Wifi only" />
</PreferenceScreen>
我的服务:
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(MyApplication.getInstance());
Log.d(TAG, "isWifiOnly : "+settings.getBoolean(OptionsFragment.WIFI_ONLY, true));
无论我是否更改日志,日志总是返回相同的值,除非我重新启动应用程序。此外,在我的 MainActivity 中,我在 OnCreate() 中有该行:
PreferenceManager.setDefaultValues(getApplicationContext(), R.xml.config, false);
如果需要,它会使用默认值创建配置文件。
我做错了什么,问题是什么?
【问题讨论】:
-
我觉得我也有这个问题,我用
Context.MODE_MULTI_PROCESS解决了。 This question 是我之前发现的。编辑:评论太快,没有阅读整个问题;在这种情况下,也许PreferenceManager.setSharedPreferencesMode()可以解决问题。 -
setSharedPreferencesMode() 不是静态的,我必须在我的偏好片段中添加这一行,就在 addPreferencesFromResource() 之后: getPreferenceManager().setSharedPreferencesMode(Context.MODE_MULTI_PROCESS);但不幸的是它仍然不起作用
-
抱歉,没有仔细阅读文档……而且,那个时候,我在
Service中使用了本地SharedPreferences并且它有效。如果这没有帮助,请道歉。 -
它有帮助 :) 您能否描述一下您是如何在您的服务中编写本地 SharedPreferences 的?您是否将 DefaultSharedPreences 与 ApplicationContext 一起使用?还是您使用与名称和模式链接的简单 SharedPreferences ?
-
我使用了与 Activity 链接的 SharedPreferences。由于我现在无法访问代码,因此无法描述它。 (有点忘了,但我相信我只是像普通的 SharedPreferences 一样使用它)。有时间我会回复你的。