Как получить 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.
настройки обычно являются пары имя-значение. Их можно хранить как "Общий Предпочтения " по различным видам деятельности в приложении (Примечание в настоящее время он не может быть разделен между процессами). Или это может быть что-то, что должно быть сохранено для конкретной деятельности.
Общие настройки: Общие настройки могут использоваться всеми компонентами (действиями, службами и т. д.) приложений.
настройки обработки действий: эти настройки могут использоваться только в рамках конкретного действия и не может использоваться другими компонентами приложения.
Общие Параметры:
общие настройки управляются с помощью 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);`