Применение изменений в настройках списка - PullRequest
0 голосов
/ 29 марта 2012

У меня есть список предпочтений с двумя значениями, и я хочу обновить эти два значения из значений из другого массива.

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
     Resources resources = this.getResources();
     String languageData = prefs.getString("languageAlias", " ");
     String[] languageAlias = resources.getStringArray(R.array.languageAlias);
     String[] voiceData = resources.getStringArray(R.array.voiceData);

     int a = 0;
     for(a=0; a<languageAlias.length; a++){
     if(languageData.equals(languageAlias[a]))
     {
         //this is where I have problems
         prefs.edit().putString("voiceAlias", voiceData[2*a]);
         prefs.edit().commit();
         break;
     }

Я смог заставить его работать до тех пор, пока мне не понадобится команда puString для внесения изменений и фиксации. Также, как мне указать, какой элемент в настройках списка я хочу изменить, так как все, что мне нужно передать в функцию putString, это ключ?

Ответы [ 2 ]

0 голосов
/ 29 марта 2012

Вы не можете записывать строковые массивы в ваши SharedPreferences.Вы должны изменить это.Вы можете использовать

putStringSet (Строковый ключ, Установить значения)

, но это доступно только с уровня API 11 и выше.Так что проверь это.Или вы можете преобразовать свой массив в одну строку или в строку JSON (пример, который я видел в другом месте)

Проверьте ссылку ниже. Возможно ли добавить массив или объект в SharedPreferences на Android

0 голосов
/ 29 марта 2012

После этого:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

нужно добавить:

SharedPreferences.Editor editor = prefs.edit();

Тогда вместо

prefs.edit().putString("voiceAlias", voiceData[2*a]);
prefs.edit().commit();

использование

editor.putString("voiceAlias", voiceData[2*a]);
editor.commit();

Документация по edit () гласит:

Создать новый редактор для этих предпочтений

Это означает, что каждый раз, когда вы вызываете prefs.edit(), он создает новый объект Editor, поэтому, когда вы помещаете строку с prefs.edit().putString(...) и когда вы фиксируете с prefs.edit().commit(), вы ссылаетесь на два новых, различных Editor объекты.

Полагаю, вы тоже можете сделать prefs.edit().putString(...).commit(), но я не уверен, возможно ли это.

...