Инициализация предпочтений из XML в основной деятельности
Моя проблема в том, что когда я запускаю приложение, и пользователь не открывал мой PreferenceActivity
, поэтому, когда я их извлекаю, не получают значений по умолчанию, определенных в файле preference.xml.
файл preference.xml:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:key="applicationPreference" android:title="@string/config"
>
<ListPreference
android:key="pref1"
android:defaultValue="default"
android:title="Title"
android:summary="Summary"
android:entries="@array/entry_names"
android:entryValues="@array/entry_values"
android:dialogTitle="@string/dialog_title"
/>
</PreferenceScreen>
Фрагмент моей основной деятельности (onCreate
метод):
SharedPreferences appPreferences = PreferenceManager.getDefaultSharedPreferences(this);
String pref1 = appPreferences.getString("pref1", null);
В результате я получаю значение null
.
Ответы
Ответ 1
В onCreate()
вашего основного Activity
просто вызовите метод PreferenceManager.setDefaultValues()
.
PreferenceManager.setDefaultValues(this, R.xml.preference, false);
Это прочитает ваш файл preference.xml
и задает значения по умолчанию, определенные там. Установка аргумента readAgain
на false
означает, что это будет устанавливать только значения по умолчанию, если этот метод никогда не вызывался в прошлом, поэтому вам не нужно беспокоиться о переопределении пользовательских настроек каждый раз при создании Activity
.
Ответ 2
Я буду краток.:)
strings.xml (на самом деле у меня prefs.xml исключительно для настроек):
<string name="pref_mypref_key">mypref</string>
<string name="pref_mypref_default">blah</string>
preferences.xml
android:key="@string/pref_mypref_key"
android:defaultValue="@string/pref_mypref_default"
MyActivity.java
String myprefVal = prefs.getString(getString(R.string.pref_mypref_key), getString(R.string.pref_mypref_default));
Ответ 3
В качестве второго параметра ваш вызов getString()
имеет null
. Измените это значение по умолчанию, которое вы хотите.