java - 首选项默认值和 PreferenceActivity

标签 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() 时)默认情况下,首选项 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/

相关文章:

java - 我想从我的应用程序中删除 SharedPreferences 但没有任何反应

android - 如何向显示在 AlertDialog 下方的 WindowManager 添加 View

Android:是否有解决 SuperNotCalledException 的方法?

java - 将 SharePreference 字符串保存到 ListView

java - 仅在 Java 中没有停靠栏/任务栏图标的系统托盘中运行

java - 有没有办法重建sessionFactory?

java - OriginalDestination 可以用作死信队列使用者的选择器吗?

android - 运行针对 Android 设备使用共享库的交叉编译 C 应用程序

android - 使用 sharedPreferences 在 listView 中保存 textView 颜色

android - SharedPreferences 应用程序上下文与 Activity 上下文