У меня есть активность, которая используется для редактирования некоторого объекта. В настоящее время его макет как простая форма, но я бы хотел, чтобы он был более похож на активность предпочтений. Я хотел бы использовать те же макеты, которые доступны там (например, CheckBoxPreference), но сохранить изменения в моем объекте, а не в настройках. Есть ли простой способ иметь активность, которая выглядит как предпочтения, но не использует предпочтения на задней панели?
Вы можете достичь этого, используя следующие 2 шага:
Установите предпочтение не постоянным с помощью android:persistent="false"
в xml или через setPersistent(false)
в коде. Таким образом, параметры SharedPreferences
умолчанию не будут изменены, когда пользователь изменяет значения в пользовательском интерфейсе предпочтений.
Изменение значения OnPreferenceChangeListener
через прослушиватель OnPreferenceChangeListener
зарегистрированный с помощью setOnPreferenceClickListener
. Это позволит вам перехватывать изменения и обрабатывать их так, как вам нужно.
Да, вы можете предоставить свою собственную реализацию SharedPreferences
и сохранить свои данные где-то, что не является предпочтительным, но при этом использовать один и тот же интерфейс и определение XML. См. Этот вопрос и эту ссылку. Образец ссылки довольно сложный, поскольку он записывает данные обратно в базу данных напрямую, но очень легко заменить простой Map
а затем извлечь данные с карты в ваш объект. Или, если вы хотите, чтобы данные были сохранены немедленно, просто напишите прямо в свой объект.