2012-07-03 2 views
2

У меня есть функция предпочтения и служба в моем приложении среди других компонентов.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' я просто проверяю этот флаг. Если это первый раз, я ничего не делаю. И в методе «onResume» PreferenceActivity я помещаю флаг в значение «false», поэтому последующие вызовы метода onSharedPreferenceChanged будут делать то, что ожидается. Спасибо за идею. – Eduardo

+0

Асфальт неверен, но комментарий прав: вы должны установить флаг в PreferenceActivity.onResume, а не в onSharedPreferenceChanged. –

+0

Этот ответ неверен, и комментарий не способствует хорошему подходу. Нужно установить настройки по умолчанию в «MainActivity.onCreate()», как показано в ответе @kakopappa. –

3

У меня была такая же проблема, и я нашел еще один способ решить эту проблему с помощью этого.

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

Таким образом, вы можете установить значения по умолчанию для настроек перед регистрами для внесения изменений.

+0

1+ Это должно быть отмечено как ответ. –

Смежные вопросы