【问题标题】:Save singleChoiceItems AlertDialog option using SharedPreference使用 SharedPreference 保存 singleChoiceItems AlertDialog 选项
【发布时间】: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


【解决方案1】:

我能够通过在sharedPreference 中分享与主题相关的字符串来解决问题。 我还实现了AlertDialog 问题,我想检查之前在应用程序中选择的项目。

以下是我使用的代码:

String selectedTheme = "Light";
int checkedItem = 0;

public static final String SHARED_PREFS = "sharedPrefs";
public static final String TEXT = "text";
public static final String RADIO = "selected";

然后我从onCreate() 打电话给loadData()updateViews()

public void openDialog() {
        String[] themes = {"Light", "Dark", "System default"};
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setTitle("Choose Theme");

        if (selectedTheme.equals("Light")) {
            checkedItem = 0;
        } else if (selectedTheme.equals("Dark")) {
            checkedItem = 1;
        } else {
            checkedItem = 2;
        }
        builder.setSingleChoiceItems(themes, checkedItem, 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) {
                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);
                }
                saveData();
            }
        });
        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        builder.show();

   }
public void saveData() {
        SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(TEXT, selectedTheme);
        editor.putInt("selected", checkedItem);
        editor.apply();
        Toast.makeText(MainActivity.this, "Data Saved", Toast.LENGTH_SHORT).show();
    }


    public void loadData() {
        SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
        selectedTheme = sharedPreferences.getString(TEXT, "System default");
        checkedItem = sharedPreferences.getInt("selected", 0);
    }


    public void updateViews() {
        if (selectedTheme.equals("Light")) {
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
            checkedItem = 0;
        }
        else if (selectedTheme.equals("Dark")) {
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
            checkedItem = 1;
        }
        else {
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
            checkedItem = 2;
        }
    }

我按照this链接中的教程进行操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    相关资源
    最近更新 更多