Android - что-то делать в действии, когда предпочтения меняются - PullRequest
3 голосов
/ 29 октября 2011

У меня есть два класса, CustomerPreferences который extends PreferenceActivity implements OnSharedPreferenceChangeListener и CustomerActivity который extends ActivityCustomerActivity я вычисляю некоторые значения.В CustomerPreferences есть конкретный ListPreference, который я хочу отслеживать.Когда пользователь вводит CustomerPreferences - что делается с помощью параметра меню на CustomerActivity - и изменяет это значение ListPreference, затем нажимает кнопку возврата и возвращает на CustomerActivity, я хочу пересчитать свои значения на основеновая настройка предпочтений.Если пользователь входит в CustomerPreferences, но не меняет значение ListPreference, я не хочу пересчитывать что-либо по возвращении в CustomerActivity.

Как я могу это сделать?

Я полагаю, что мне нужно что-то сделать в CustomerPreferences.onSharedPreferenceChanged, а также, может быть, CustomerPreferences.onBackPressed, тогда, вероятно, обработать что-то в CustomerActivity.

1 Ответ

8 голосов
/ 29 октября 2011

Вы можете обработать изменение в методе onResume () CustomerActivity. Поэтому после того, как пользователь нажмет назад, в onResume () просмотрите ваши предпочтения, пересчитайте значения и измените представление GUI на основе вычисленных значений.

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

Еще одна вещь, которую вы можете сделать, это установить логическое значение в общих настройках, таких как preferencesChanged, которое будет установлено в true в CustomerPreferences.onSharedPreferenceChanged. Затем проверьте предпочтения, измененные в onResume (). Если это правда, делайте свои пересчеты. В противном случае ничего не делать.

Другой вариант - запустить действие предпочтений для результата с помощью startActivityForResult (). Затем выполните пересчеты в onActivityResult () в CustomerActivity. Значение результата будет установлено в CustomerPreferences.onSharedPreferenceChanged

...