Инициализировать настройки из 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 значение.

3 ответа

Решение

В onCreate() вашего основного Activity просто позвони PreferenceManager.setDefaultValues() метод.

PreferenceManager.setDefaultValues(this, R.xml.preference, false);

Это будет читать ваши preference.xml файл и установить значения по умолчанию, определенные там. Настройка readAgain аргумент false означает, что это установит значения по умолчанию, только если этот метод никогда не вызывался в прошлом, поэтому вам не нужно беспокоиться о переопределении настроек пользователя каждый раз, когда ваш Activity создано.

Я буду краток.:)

strings.xml (на самом деле у меня есть prefs.xml исключительно для предпочтений):

<string name="pref_mypref_key">mypref</string>
<string name="pref_mypref_default">blah</string>

Предпочтения.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));

Ваш звонок в getString() имеет null как второй параметр. Измените это значение по умолчанию, которое вы хотите.

Другие вопросы по тегам