2012-07-03 44 views
2

我的应用程序中包含PreferenceActivity和Service以及其他组件。OnSharedPreferenceChangeListener在用户首次进入首选项活动时触发

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

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

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

感谢

回答

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 
} 
+1

感谢您的回答。你给了我解决问题的想法。我所做的就是像你告诉我的那样创造一面旗帜。在'onSharedPreferenceChanged'方法中,我只是检查这个标志。如果这是第一次,我什么都不做。并且在PreferenceActivity的“onResume”方法中,我将该标志设置为'false',因此下次调用'onSharedPreferenceChanged'方法将执行所期望的操作。感谢这个想法。 – Eduardo

+0

aswer是错误的,但注释是正确的:您必须在PreferenceActivity.onResume中设置标志,而不是在onSharedPreferenceChanged中。 –

+0

这个答案是错误的,评论也没有推广一个好方法。你应该在'MainActivity.onCreate()'中设置首选项默认值,如@kakopappa的答案所示。 –

3

我有同样的问题,我发现另一种方式利用此来解决这个问题。

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

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

+0

1+这应该被标记为答案。 –