我在我的应用程序中有一个PreferenceActivity和Service以及其他组件。
当更改首选项时,我希望我的服务根据首选项更改执行一些工作,因此我将服务配置为OnSharedPreferenceChangeListener
。
我的问题是当用户第一次进入偏好活动时。虽然没有更改首选项,但在“preferences.xml”中每个首选项都会触发OnSharedPreferenceChange
个事件。
我怎么能避免这种行为?我不希望在用户第一次进入“偏好设施活动”时触发OnSharedPreferenceChange
事件。
由于
答案 0 :(得分:3)
我遇到了同样的问题,我找到了另一种方法来解决这个问题。
PreferenceManager.setDefaultValues(this, R.xml.preference, false);
这样,您可以在注册更改之前设置首选项的默认值。
答案 1 :(得分:1)
只需在共享偏好中使用标记,就像那样
if( prefs.getBoolean( "preferenceFirstTime", true ) ) {
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("preferenceFirstTime", false);
editor.commit();
} else {
//this is not the first time
}
答案 2 :(得分:0)
如果您有 2 个或更多 PreferenceScreen,则需要使用:
PreferenceManager.setDefaultValues(this, R.xml.preference, true);
对于每个 PreferenceScreen。但是在最后一种用法上:
PreferenceManager.setDefaultValues(this, R.xml.preference, false);
示例:您有三个 PreferenceScreen,请执行以下操作:
PreferenceManager.setDefaultValues(this, R.xml.preference1, true);
PreferenceManager.setDefaultValues(this, R.xml.preference2, true);
PreferenceManager.setDefaultValues(this, R.xml.preference3, false);