Инициализация предпочтений из 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. Измените это значение по умолчанию, которое вы хотите.