Настройки по умолчанию и PreferenceActivity

Использование Android-аннотаций. Мои предпочтения:

@SharedPref(value = SharedPref.Scope.APPLICATION_DEFAULT)
public interface MyPreferences {
    @DefaultBoolean(true)
    boolean myOption();
}

preferences.xml:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <CheckBoxPreference
        android:key="myOption"
        android:title="My Option Name"/>
</PreferenceScreen>

My PreferencesActivity:

public class MyPreferencesActivity extends PreferenceActivity{
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }
}

Проблема в том, что, несмотря на то, что значение myOption по умолчанию равно true (и действительно - оно есть при вызове MyPreferences_.myOption().get()), флажок в настройках активности по умолчанию не установлен.

То же самое происходит с настройками String. Они возвращают строку по умолчанию, указанную в аннотации @DefaultString, но она не отображается в PreferenceActivity. Только после того, как я изменю значение предпочтения из действия, оно отображается правильно.


person fracz    schedule 23.01.2014    source источник


Ответы (1)


Я разрешил дублирование значений по умолчанию:

values/preferences_defaults.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="default_myOption">true</bool>
    <string name="default_myString">my string</string>
</resources>

Предпочтения:

@SharedPref(value = SharedPref.Scope.APPLICATION_DEFAULT)
public interface MyPreferences {
    @DefaultRes(R.bool.default_myOption)
    boolean myOption();

    @DefaultRes(R.string.default_myString)
    String myString();
}

И preferences.xml:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <CheckBoxPreference
        android:key="myOption"
        android:defaultValue="@bool/default_myOption"
        android:title="My Option Name"/>
    <EditTextPreference
        android:key="myString"
        android:defaultValue="@string/default_myString"
        android:title="My String Option"/>
</PreferenceScreen>

Теперь я могу определить значения по умолчанию для аннотаций и PreferenceActivity в одном файле XML.

person fracz    schedule 23.01.2014