【发布时间】:2022-01-12 11:37:15
【问题描述】:
我已经实现了一个singleChoiceItems AlertDialog,它可以从我的安卓应用程序的导航菜单中打开。我正在使用它来更改应用程序主题(浅色、深色、系统默认值)。
现在我正在尝试将AlertDialog 的当前状态与用户选择的主题一起保存在sharedPrefernces 中。例如,如果我之前选择了一个深色主题,我希望 AlertDialog 在将主题应用到应用程序时显示相同。
这是我一直在使用的代码。
String selectedTheme = "Light";
public static final String SHARED_PREFS = "sharedPrefs";
SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
selectedTheme = sharedPreferences.getString("str", "Light");
public void openDialog() {
String[] themes = {"Light", "Dark", "System default"};
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Choose Theme");
builder.setSingleChoiceItems(themes, 2, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
selectedTheme = themes[which];
}
});
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
SharedPreferences sharedPreferences = getSharedPreferences("SHARED_PREFS", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("str", selectedTheme);
editor.apply();
if (selectedTheme.equals("Light")) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
}
else if (selectedTheme.equals("Dark")) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
}
else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
}
dialog.dismiss();
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.show();
}
使用上面的代码,sharedpreferences 不会存储当前状态。我需要做哪些更改才能使其正常工作?
【问题讨论】:
-
if (selectedTheme.equals("Light")) editor.putString("str", "Dark");?? -
int checkedItem = 2; .setSingleChoiceItems(choices, checkedItem, .......您将其设置为 0:第一个。 -
一行就可以了:
editor.putString("str", selectedTheme); -
@blackapps,我尝试了你的建议。它没有工作
-
请编辑您的代码,以便我们查看您所做的更改以及您如何确定
checkedItem的值。为什么对我的第一条评论没有反应?
标签: java android sharedpreferences android-alertdialog