Как получить 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.содержание.Context) с контекстом в том же пакете, что и это действие.

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

getSharedPreferences(name, mode)

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

5 ответов


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

обновление

по данным Общие Настройки / Android Developer Tutorial (Часть 13) Саи Гита М Н,

много применений могут обеспечить путь захватить предпочтения потребителя на настройки конкретного приложения или действия. За поддержку это, 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() метод действия. The 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 создает это имя (возможно, на основе имени пакета вашего проекта?). Вы можете получить его, поместив следующий код в SettingsActivity onCreate(), и видя, что 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);
}

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

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

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

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;

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

@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);`