首页 > 解决方案 > 切换紧凑型 Android SharedPreferences 不起作用

问题描述

以下代码中的 SharedPreferences 不能按要求工作。我哪里错了?SharedPreferences 在单击时保存,并且在我的 Android 活动中检索 OnCreate 和 OnResume 的值也是如此。

代码:

mySwitch = (SwitchCompat) findViewById(R.id.atten);
strttime = (TextView) findViewById(R.id.textView5);
endtime = (TextView) findViewById(R.id.textView6);
SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
silent = settings.getBoolean("switchkey", false);
mySwitch.setChecked(silent);

mySwitch.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        final SwitchCompat btn = (SwitchCompat) v;
        final boolean switchChecked = silent;

        String message = "Are you sure you want to Logout?";
        if (!btn.isChecked()) {
            message = "Are you sure you want to Login?";
        }
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this, R.style.MyAlertDialogStyle); // Change "this" to `getActivity()` if you're using this on a fragment
        builder.setMessage(message).setPositiveButton("Ok", new DialogInterface.OnClickListener() {@Override
            public void onClick(DialogInterface dialog, int i) {
                // "Yes" button was clicked
                if (switchChecked) {

                    Log.d("You are :", "Checked");

                    SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
                    SharedPreferences.Editor editor = settings.edit();
                    editor.putBoolean("switchkey", true);
                    editor.apply();
                } else {
                    SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
                    SharedPreferences.Editor editor = settings.edit();
                    editor.putBoolean("switchkey", false);
                    editor.apply();
                }
            }
        }).setNegativeButton("Cancel", null).show();
    }
});

标签: androidsharedpreferencesandroid-switch

解决方案


为什么您似乎有两个不同的SwitchCompat视图,称为mySwitchbtn?很难说出你想要完成什么。

不管怎样,试试这个来获取状态SwitchCompat

builder.setMessage(message)
                .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int i) {
                        SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
                        SharedPreferences.Editor editor = settings.edit();
                        editor.putBoolean("switchkey", mySwitch.isChecked());
                        //or maybe you want btn.isChecked()? I don't know
                        editor.apply();
                    }

推荐阅读