首选项默认值和PreferenceActivity

时间:2014-01-23 21:36:47

标签: java android sharedpreferences android-annotations

使用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>

我的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中。只有在我从活动中更改优先级值后,才能正确显示。

1 个答案:

答案 0 :(得分: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>

现在,我可以在一个XML文件中为注释和PreferenceActivity定义默认值。