Как я могу получить 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 из PreferenceActivityPreferenceFragment утверждает, что

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

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

getSharedPreferences(name, mode)

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

5 344

5 ответов:

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

обновление

по данным Общие Настройки / Учебник Для Разработчиков Android (Часть 13) by 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 другие приложения тоже есть запись для созданного файла.

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

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

до ценностей в магазине в файле SharedPreference.Editor "объект" должен быть использован. Editor является вложенным интерфейсом в SharedPreference класса.

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

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

Настройки Активности:

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

Ниже приведен код, чтобы получить предпочтения

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 Хранилище Данных размещаете на сайте разработчиков.

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

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

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

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

сначала объявите эти методы..

public static void putPref(String key, String value, Context context) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString(key, value);
    editor.commit();
}

public static String getPref(String key, Context context) {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    return preferences.getString(key, null);
}

затем вызовите это, когда вы хотите поставить преф:

putPref("myKey", "mystring", getApplicationContext());

вызов это когда вы хотите получить прив:

getPref("myKey", getApplicationContext());

или вы можете использовать этот объект https://github.com/kcochibili/TinyDB--Android-Shared-Preferences-Turbo что упрощает все еще больше

пример:

TinyDB tinydb = new TinyDB(context);

tinydb.putInt("clickCount", 2);
tinydb.putFloat("xPoint", 3.6f);
tinydb.putLong("userCount", 39832L);

tinydb.putString("userName", "john");
tinydb.putBoolean("isUserMale", true); 

tinydb.putList("MyUsers", mUsersArray);
tinydb.putImagePNG("DropBox/WorkImages", "MeAtlunch.png", lunchBitmap);

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

public class global {
    public static Activity globalContext = null;

и установить его в основной деятельности, создать

@Override
public void onCreate(Bundle savedInstanceState) {
    Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(
            global.sdcardPath,
            ""));
    super.onCreate(savedInstanceState);

    //Start 
    //Debug.startMethodTracing("appname.Trace1");

    global.globalContext = this;

также все ключи предпочтений должны быть независимыми от языка, я в шоке, что никто не упомянул об этом.

getText(R.string.yourPrefKeyName).toString()

теперь назовите это очень просто, как это в одной строке кода

global.globalContext.getSharedPreferences(global.APPNAME_PREF, global.MODE_PRIVATE).getBoolean("isMetric", true);

если у вас есть флажок, и вы хотели бы получить его значение ie true / false в любом файле java--

использовать--

Context mContext;
boolean checkFlag;

checkFlag=PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(KEY,DEFAULT_VALUE);`