2

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

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

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

我怎样才能避免这种行为?我不希望在OnSharedPreferenceChange用户第一次进入“首选项活动”时触发该事件。

谢谢

4

3 回答 3

3

我有同样的问题,我找到了另一种方法来解决这个问题。

PreferenceManager.setDefaultValues(this, R.xml.preference, false);

这样,您可以在注册更改之前设置首选项的默认值。

于 2013-01-15T15:34:48.830 回答
1

只需在 sharedpreferences 中使用一个标志,就像那样

 if( prefs.getBoolean( "preferenceFirstTime", true ) ) {
      SharedPreferences.Editor editor = prefs.edit();
      editor.putBoolean("preferenceFirstTime", false);
      editor.commit();
 } else {
      //this is not the first time 
 }
于 2012-07-03T08:37:01.490 回答
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);
于 2021-08-08T19:07:37.330 回答