Android - Как установить предпочтение в коде

У меня есть приложение для Android, в котором у меня есть свои настройки в XML-файле, который отлично работает. Теперь я хочу установить один из параметров с помощью кода, а не отображать весь экран параметров, как мне это сделать?


person Community    schedule 16.02.2009    source источник


Ответы (3)


Я предполагаю, что под настройками вы имеете в виду настройки своего приложения, а не настройки телефона Android.

Чтобы сохранить настройки между запусками вашего приложения, вам необходимо сделать следующее

  1. Создайте объект SharedPreferences

    SharedPreferences settings = getSharedPreferences(String n, MODE_PRIVATE);
    

    Строка n определяет ваши предпочтения, а второй аргумент – это режим, в котором они будут доступны

  2. Создание экземпляра объекта Editor

    SharedPreferences.Editor editor = settings.edit();
    

    Примечание: не пытайтесь использовать settings.editor.edit(), это не создаст постоянный объект, и приведенный ниже код не будет работать

  3. Запишите свои предпочтения в буфер

    editor.put...(String, value)
    

    Существует множество функций put, putString, putBoolean и т. д. Строка – это ключ ("версия", "успешный запуск"), а значение – значение ("1.5.2", true)

  4. Очистить буфер

    editor.commit();
    

    На самом деле это означает, что вы указали настройки. Если ваше приложение выйдет из строя до этой строки, настройки не будут записаны. Существует также задокументированная ошибка: предполагается, что commit() возвращает логическое значение, указывающее на успех или неудачу. Последнее, что я проверял, всегда возвращало false.

Эти настройки будут храниться на телефоне и будут доступны только вашему приложению.

Дополнительная документация находится здесь

person Will    schedule 16.02.2009
comment
На самом деле вы можете использовать однострочник: prefs.edit().putInt(key, value).commit(); - person tomash; 31.12.2009
comment
Любые идеи, чем это отличается от PreferenceActivity, и, возможно, у вас есть ссылка на пример PreferenceActivity? - person Eugene van der Merwe; 17.01.2011
comment
Если вас не волнует возвращаемое значение, в документах говорится, что, начиная с уровня API 9, вам лучше вызывать apply(); вместо commit(); - person Twinone; 08.04.2013
comment
Хотя я опоздал на 5 лет, но использование того, что предложил @tomash, не удалось, когда я хотел создать новое логическое значение для своих предпочтений через java, а не в файле xml. хотя использование его строки после создания ключа сработало. Кто-нибудь может объяснить, в чем разница между Will answer и tomash? Разве они оба не делают то же самое? - person JustADev; 21.08.2014
comment
@OmarBizreh - то, что сказал Томаш (один вкладыш), точно такое же, как строки 2-4 ответа Уилла. (Конечно, вам все равно нужно создать объект настроек (строка 1)). Я не знаю, что произойдет, если вы попробуете строку 1 ДО того, как вы создали это предпочтение, а затем попытаетесь использовать этот pref ob позже - это то, что вы сделали? Если это так, то решение таково: везде, где в коде вы СОЗДАЕТЕ предпочтение (устанавливаете ключ), также установите глобальный класс, который содержит pref ob. Или просто будьте в безопасности и делайте строку 1 каждый раз... - person ToolmakerSteve; 18.09.2014
comment
@EugenevanderMerwe — PreferenceActivity или PreferenceFragment используются для отображения пользователю всех настроек (или группы настроек), чтобы пользователь мог их изменить. ОП явно спрашивает, как он может установить одну или несколько настроек из кода, не вызывая этот графический интерфейс. Таким образом, разница заключается в том, что программист устанавливает предпочтение, а пользователь устанавливает предпочтение. - person ToolmakerSteve; 18.09.2014
comment
@ToolmakerSteve Мой файл настроек уже создан, но я хотел добавить новый ключ через java. Так что использование 1-строчного кода не сработало. Мне пришлось использовать код tomash, чтобы иметь возможность добавить новый ключ настройки в мой уже созданный файл настроек. - person JustADev; 18.09.2014

Я пробовал это, но не работал:

SharedPreferences settings = getSharedPreferences(String n, MODE_PRIVATE);

Попробуйте это вместо этого:

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
person Adan    schedule 01.12.2011
comment
Было бы гораздо полезнее сказать, ЧТО пошло не так, а не не сработало. (Он не скомпилировался? Он разбился, когда вы его запустили? Возвращенный список настроек был пуст?) Тем не менее, +1 за хороший совет: глядя на мое приложение, ваша строка используется для доступа к настройкам из MainActivity ; строка исходного ответа может дополнительно использоваться для доступа к настройкам из кода в PreferenceFragment (фрагмент, который содержит XML, описывающий виджеты для отображения/изменения настроек.) - person ToolmakerSteve; 18.09.2014

Вы можете сохранить что-то в общих настройках, используя код ниже

public static void save(String valueKey, String value) {
    SharedPreferences prefs = PreferenceManager
            .getDefaultSharedPreferences(context);
    SharedPreferences.Editor edit = prefs.edit();
    edit.putString(valueKey, value);
    edit.commit();
    }

Чтобы прочитать предпочтения:

public static String read(String valueKey, String valueDefault) {
    SharedPreferences prefs = PreferenceManager
            .getDefaultSharedPreferences(context);
   return prefs.getString(valueKey, valueDefault);
}
person AndroidSter    schedule 29.04.2016