【问题标题】:Preferences defaults and PreferenceActivity首选项默认值和 PreferenceActivity
【发布时间】:2014-01-23 21:36:47
【问题描述】:

使用 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 中。只有在我从活动中更改偏好值后,它才会正确显示。

【问题讨论】:

    标签: java android sharedpreferences android-annotations


    【解决方案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 的默认值。

    【讨论】: