Ответ 1
Это невозможно. Наборы представляют собой неупорядоченные коллекции.
Я пытаюсь сохранить/восстановить набор строк, и все работает, кроме одного. Когда я создаю свои строки, я поставлю:
Set<String> set = new HashSet<String>();
for(int i=0; i<toggles.size();i++){
set.add(toggles.get(i).serialise());
}
Заказ - это, например, "blutooth" "application" "data". Когда я вернусь, установите:
Set<String> set = prefs.getStringSet(key, new HashSet<String>());
for (String toggle : set){
Toggle t = new Toggle();
t.deserialize(toggle);
toggles.add(t);
}
Я получаю "приложение" "bluetooth" "данные", они сортируются по имени, и я не хочу этого. Я хочу получить тот же порядок, который у меня есть. Кто-нибудь может мне помочь?
Это невозможно. Наборы представляют собой неупорядоченные коллекции.
Вы можете префикс своих строк по номерам, например 00application
, 01bluetooth
, 02data
, в том порядке, в котором вы хотите их получить. Поместите Set<String>
, возвращенный из getStringSet
, в Array<Set>
и отсортируйте его.
Set<String> set = prefs.getStringSet(key, new HashSet<String>());
Array<String> a = set.toArray();
java.util.Arrays.sort(a);
Вы можете сохранить список строк в виде одной строки с разделителем. Например, это ваш массив:
["Italy", "France", "Spain", "Japan", "United States"]
Вы можете сохранить его как:
"Italy;France;Spain;Japan;United States"
В коде:
SharedPreferences sharedPref = mContext.getSharedPreferences(PREF_KEY, Context.MODE_PRIVATE);
Editor editor = sharedPref.edit();
// countries is your List
String countriesString = TextUtils.join(";", countries);
editor.putString("countries", countriesString);
editor.apply();
Чтобы получить данные:
final String countriesString = sharedPref.getString("countries", "");
List<String> countries = new ArrayList<>();
if (!countriesString.isEmpty()){
countries = new ArrayList<>(Arrays.asList(countriesString.split(";")));
}