Как я получаю SharedPreferences от PreferenceActivity в Android?

Я использую PreferenceActivity для показа некоторых настроек для моего приложения. Я расширяю настройки с помощью XML-файла так, чтобы мой onCreate (и полные методы класса) был похож на это:

public class FooActivity extends PreferenceActivity {
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        addPreferencesFromResource(R.xml.preference);
    }
}

javadoc PreferenceActivity PreferenceFragment указывает это

Эти предпочтения автоматически сохранят к SharedPreferences, поскольку пользователь взаимодействует с ними. Для получения экземпляра SharedPreferences, который будет использовать предпочтительная иерархия в этом действии назовите getDefaultSharedPreferences (android.content. Контекст) с контекстом в том же пакете как это действие.

Но как я получаю название SharedPreference в другом Действии? Я могу только звонить

getSharedPreferences(name, mode)

в другом действии, но мне нужно название SharedPreference, который использовался PreferenceActivity. Каково имя или как я могу получить его?

364
задан Ziem 25 April 2015 в 10:03
поделиться

2 ответа

import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);

Обновление

Согласно Общие настройки | Учебное пособие для разработчиков Android (часть 13) , автор Sai Geetha M. N,

Многие приложения могут предоставлять способ фиксировать пользовательские предпочтения в настройках определенного приложения или действия. Для поддержки этого Android предоставляет простой набор API.

Предпочтения обычно представляют собой пары имя-значение. Они могут храниться как «Общие настройки» для различных действий в приложении (обратите внимание, что в настоящее время не может использоваться совместно между процессами). Или это может быть что-то, что нужно сохранить для конкретного действия.

  1. Общие настройки: Общие настройки могут использоваться всеми компонентами (действиями, службами и т. Д.) Приложений.

  2. Предпочтения, связанные с обработкой действий: эти предпочтения могут использоваться только в рамках определенного действия и не могут использоваться другими компонентами приложения.

Общие настройки:

Общие настройки управляются с помощью метода getSharedPreferences класса Context . Настройки хранятся в файле по умолчанию (1) , или вы можете указать имя файла (2) , которое будет использоваться для ссылки на настройки.

(1) Рекомендуемый способ - использовать режим по умолчанию без указания имени файла

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

(2) Вот как вы получаете экземпляр, когда указываете имя файла

public static final String PREF_FILE_NAME = "PrefFile";
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

MODE_PRIVATE - рабочий режим для предпочтений. Это режим по умолчанию и означает, что к созданному файлу будет обращаться только вызывающее приложение.Поддерживаются два других режима: MODE_WORLD_READABLE и MODE_WORLD_WRITEABLE . В MODE_WORLD_READABLE другое приложение может читать созданный файл, но не может его изменять. В случае MODE_WORLD_WRITEABLE другие приложения также имеют права на запись для созданного файла.

Наконец, когда у вас есть экземпляр настроек, вот как вы можете получить сохраненные значения из настроек:

int storedPreference = preferences.getInt("storedInt", 0);

Чтобы сохранить значения в файле настроек Необходимо использовать объект SharedPreference.Editor . Редактор - это вложенный интерфейс в классе SharedPreference .

SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

Редактор также поддерживает такие методы, как remove () и clear () для удаления значений предпочтений из файла.

Предпочтения действий:

Общие предпочтения могут использоваться другими компонентами приложения. Но если вам не нужно делиться настройками с другими компонентами и вы хотите иметь частные настройки активности, вы можете сделать это с помощью метода действия getPreferences () . Метод getPreference использует метод getSharedPreferences () с именем класса активности в качестве имени файла настроек.

Ниже приведен код для получения предпочтений.

SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);

Код для хранения значений также такой же, как и в случае общих предпочтений.

SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

Вы также можете использовать другие методы, такие как сохранение состояния активности в базе данных. Примечание. Android также содержит пакет под названием android.preference .Пакет определяет классы для реализации пользовательского интерфейса предпочтений приложения.

Чтобы увидеть еще несколько примеров, проверьте сообщение Android Хранилище данных на сайте разработчиков.

709
ответ дан 23 November 2019 в 00:09
поделиться

Если у вас нет доступа к getDefaultSharedPreferenes () , вы можете вместо этого использовать getSharedPreferences (name, mode) , вам просто нужно передать в правильном названии.

Android создает это имя (возможно, на основе имени пакета вашего проекта?). Вы можете получить его, поместив следующий код в SettingsActivity onCreate () и посмотрев, что такое preferencesName .

String preferencesName = this.getPreferenceManager().getSharedPreferencesName();

Строка должна иметь вид com.example.projectname_preferences . Жесткий код, который находится где-то в вашем проекте, и передайте его в getSharedPreferences () , и все будет в порядке.

29
ответ дан 23 November 2019 в 00:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: