Вопрос

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

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

Джавадок Предпочтениецективность ПредпочтениеFragment. говорится, что

Эти предпочтения автоматически сохранят для SharedPreferences, так как пользователь взаимодействует с ними. Чтобы получить экземпляр ShareDPreferences, которые используют иерархию предпочтения в этой деятельности, вызовите GetDefaultSharedPreferences (Android.content.context) с контекстом в том же пакете, что и в качестве этой деятельности.

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

getSharedPreferences(name, mode)

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

Это было полезно?

Решение

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

Обновлять

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

Многие приложения могут предоставить способ захватывать пользовательские настройки в настройках конкретного приложения или действия. Для поддержки этого 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 Объект должен быть использован. 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 Хранилище данных пост на сайт разработчиков.

Другие советы

Если у вас нет доступа к 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);
}

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

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

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

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

Context mContext;
boolean checkFlag;

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

Обновлено 2019.

Вы можете просто использовать PowerPreference библиотека

https://github.com/aliesaassadi/android-power-preeference.

Получение общих приспособлений

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

PowerPreference.getDefaultFile()

Или если вы хотите определенный файл предпочтения

PowerPreference.getFileByName(fileName)

Написание данных:

PowerPreference.getDefaultFile().put(key,value)

Получение данных

PowerPreference.getDefaultFile().getString(key,value)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top