#android #sharedpreferences
#Android #sharedpreferences
Вопрос:
Я использую общие настройки и немного не уверен в том, какая наилучшая практика для какого типа данных хранить пары ключ-значение.
Пример: у меня есть счетчик с 3 выпадающими опциями: apple, banana, orange
В моем счетчике я выбираю опцию orange
и сохраняю ее в общих настройках с ключом KEY_SPINNER_FRUIT_OPTION
, каким типом данных должно быть значение? В настоящее время я сохраняю его как строки
orange
Было бы лучше использовать Integer
вместо этого?
String lastSelectedSpinnerOption = getSharedPref().getLastSavedValue("KEY_SPINNER_FRUIT_OPTION");
if(lastSelectedSpinnerOption.equals("orange")){
mSpinner.setSelection(2);
}
или
Integer lastSelectedSpinnerOption = getSharedPref().getLastSavedValue("KEY_SPINNER_FRUIT_OPTION");
if(lastSelectedSpinnerOption == 2){
mSpinner.setSelection(2);
}
Ответ №1:
Если вы сохраните Integer
ваш код, он не будет обслуживаться. Если вы измените позиции элементов (или добавите новый элемент в сохраненную позицию) в Spinner, ваш код не будет работать должным образом.
Что вы можете сделать, так это сохранить строковое значение выбранного элемента в SharedPrefs
, а затем:
int position = adapter.getPosition(myValueFromSharedPrefs);
position = position > 0 ? position : 0; // if this element was removed, choose first item of the list
mSpinner.setSelection(position);
Ответ №2:
Ну, нет никакой наилучшей практики в отношении того, какой тип вы должны вводить SharedPreferences
(если это принятый тип для API).
На самом деле это полностью зависит от того, что вы будете делать с этим значением. Если ваша цель — сохранить состояние пользовательского интерфейса, и вы абсолютно уверены, что сохраненная позиция будет содержать то же String
значение, вы можете сохранить Integer
.
Но я бы предпочел сохранить String
значение, поскольку пользователь намеревается выбрать «оранжевый», и когда придет время восстановить состояние пользовательского интерфейса, я бы искал позицию, соответствующую значению «оранжевый».