当用户第一次输入首选项活动时,将触发OnSharedPreferenceChangeListener

时间:2012-07-03 08:33:36

标签: android preferenceactivity

我在我的应用程序中有一个PreferenceActivity和Service以及其他组件。

当更改首选项时,我希望我的服务根据首选项更改执行一些工作,因此我将服务配置为OnSharedPreferenceChangeListener

我的问题是当用户第一次进入偏好活动时。虽然没有更改首选项,但在“preferences.xml”中每个首选项都会触发OnSharedPreferenceChange个事件。

我怎么能避免这种行为?我不希望在用户第一次进入“偏好设施活动”时触发OnSharedPreferenceChange事件。

由于

3 个答案:

答案 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);