问题描述
我遇到了一个问题,在运行主应用程序之前,我必须设置一整套设置。这些是通过入门过程完成的,但是在主应用程序中,这并没有反映在我的主要设置中。
在我设置入职期间:
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} }。