使用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中。只有在我从活动中更改优先级值后,才能正确显示。
答案 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定义默认值。