使用 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()
时)默认情况下,首选项 Activity 中的复选框未选中。
String
首选项也是如此。它们返回在 @DefaultString
注释中给出的默认字符串,但它不会显示在 PreferenceActivity 中。只有在我更改 Activity 的首选项值后,它才能正确显示。
最佳答案
我通过以下方式解决了默认值重复问题:
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 定义默认值。
关于java - 首选项默认值和 PreferenceActivity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21319847/