更新默认首选项

问题描述

我遇到了一个问题,在运行主应用程序之前,我必须设置一整套设置。这些是通过入门过程完成的,但是在主应用程序中,这并没有反映在我的主要设置中。

在我设置入职期间:

       radioGroup.setonCheckedchangelistener(new RadioGroup.OnCheckedchangelistener() {
            @Override
            public void onCheckedChanged(RadioGroup group,int checkedId) {
                int radioId = checkedId;
                radioButton = getActivity().findViewById(radioId);
                String str = (String) radioButton.getText();
                SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(MyApplication.getAppContext());
                SharedPreferences.Editor editor = sharedPreferences.edit();
                editor.putString(kDirection,str).apply();
                editor.commit();
            }
        });

我的偏好:

    <PreferenceCategory app:title="Directions">

        <ListPreference
            app:key="kDirectionSetting"
            app:entryValues="@array/directions"
            android:entries="@array/directions"
            app:useSimpleSummaryProvider="true"
            app:title="Direction Preference"
            />

    </PreferenceCategory>

如果我在打开首选项屏幕之前在设备文件浏览器中打开它们,则会反映在我的首选项中。然后,当打开主菜单并加载了首选项屏幕时,字符串从我的数组更改为未设置的认值,每次都相同。

如何使反映的更改第一次显示在我的设置中?

解决方法

我认为,如果您的ListPreference和存储的初始Preference值具有相同的键,那么您将获得ListPreference以编辑初始值。但是,执行此操作以将默认值设置为ListPreference:

@Override
public void onCreate(Bundle savedInstanceState) {
    ListPreference kDirectionPref = (ListPreference) findPreference("kDirectionSetting");
    kDirectionPref.setDefaultValue(prefs.getString("kDirection"));

因此,基本上,我的意思是,您应确保使用相同的键为首选项放置值,即在第一段代码中,kDirection应更改为{{1} }。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...