Android - ListPreference сохранить в файл или при входе нажать на прослушиватель? - PullRequest
0 голосов
/ 21 апреля 2011

Мое приложение имеет файл настроек "settings", который содержит 10 пар ключ / значение.

Ключи действуют как заголовки для пользователя, а значения являются URL-адресами

Ключ и значение могут быть изменены пользователем, например, первый параметр выглядит как «пример» со значением «example.com», когда пользователь изменяет этот параметр, ключ также изменяется. Таким образом, первая настройка станет «different_example» со значением «different_example.com». Все они хранятся в файле настроек «настройки».

До сих пор я управлял этим, открывая диалоговое окно, содержащее текущие пары ключ / значение в ArrayList, у которого есть onItemClickListener, которое выскакивает второе диалоговое окно, содержащее другой ArrayList возможных пар ключ / значение. При щелчке по новому элементу я удаляю текущий параметр, добавляю новый, а затем заново заполняю исходный ArrayList новыми параметрами. Это работает и позволяет одновременно изменять и обновлять ключ и значение, однако с двумя диалоговыми окнами это выглядит неловко.

Я бы хотел все это переключить на ListPreferences. Например, есть десять различных элементов ListPreference, по одному для каждого параметра, которые при нажатии открывают список всех возможных entryValues, а при выборе обновляют ключ из имени записи и значение из значения записи и сохраняют его под тот же файл "настроек". Я не вижу, как сохранить ListPreferences в конкретный файл, чтобы я мог позвонить

SharedPreferences settings = getSharedPreferences("settings", 0);

где угодно, хотя

Я также искал какой-то обработчик щелчков для того, что срабатывать при выборе записи, чтобы я мог вручную обновить файл «настроек», но безуспешно. Существует ли такая вещь? Или у меня есть другой способ сделать это?

Редактировать: я могу использовать OnPreferenceChange, чтобы вручную установить новое значение, но это не возвращает имя значения, например, значение, используемое в удобочитаемом списке. Есть идеи как это получить?

Ответы [ 2 ]

0 голосов
/ 21 апреля 2011

Ах, ну, это кажется невероятно задом наперед, но я установил для каждого ListPreference значение onPreferenceChangeListener, а каждое значение entryValue для ListPreference должно содержать имя и значение, разделенные произвольной строкой. Затем в onPreferenceChange я могу сослаться на новое значение (которое теперь также содержит новый ключ), превратить его в разделение String [] в произвольном разделителе, затем назначить индекс String [] 0 в качестве нового ключа и индекс 1 в качестве нового значения с помощью SharedPreferences.Editor после удаления исходной настройки.

Если нет какого-либо способа вернуть имя записи из массива entryValues ​​ListPreference или указать ListPreference для сохранения в конкретном файле настроек, ни один из которых не задокументирован, то это, вероятно, будет лучшим решением для меня.

0 голосов
/ 21 апреля 2011

Посмотрите, может ли это дать вам толчок для начала: Как мне получить настройки для работы в Android?

Если вы настраиваете свою ListPreference и сталкиваетесь с чем-то вроде этого Как сделать так, чтобы предпочтение не сохранялось в SharedPreferences?

...