【发布时间】:2021-06-08 18:19:55
【问题描述】:
我正在构建我的第一个 Android 应用,因此对于我缺乏专业知识,请提前道歉。到目前为止,我已经在这个问题上讨论了 2 天。当我通过共享首选项在我的设置活动中将声音设置为静音时,该设置不会“粘住”。这是我的主要活动中的代码:
SharedPreferences settingsSP;
boolean muteSound;
然后在 onCreate:
settingsSP = getApplicationContext().getSharedPreferences("PlayerPreferences", Context.MODE_PRIVATE);
muteSound = settingsSP.getBoolean("muteSound", false);
然后我显然使用 muteSound 变量来确定是否在 MainActivity 中播放声音。现在,当我进入设置活动时,我有以下代码:
SharedPreferences settingsSP;
boolean muteSound;
然后在 onCreate 我有这个:
settingsSP = getApplicationContext().getSharedPreferences("PlayerPreferences", Context.MODE_PRIVATE);
if (muteSound) {
activitySettingsBinding.displayMuteCheckBox.setChecked(true);
} else {
activitySettingsBinding.displayMuteCheckBox.setChecked(false);
}
activitySettingsBinding.displayMuteCheckBox.setOnClickListener(v -> {
if (activitySettingsBinding.displayMuteCheckBox.isChecked()) {
muteSound = true;
SharedPreferences.Editor editor = settingsSP.edit();
editor.putBoolean("muteSound", muteSound);
editor.apply();
} else {
muteSound = false;
SharedPreferences.Editor editor = settingsSP.edit();
editor.putBoolean("muteSound", muteSound);
editor.apply();
soundPool.play(bubble, 1, 1, 1, 0, 1);
}
xml代码:
<CheckBox
android:id="@+id/displayMuteCheckBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="40dp"
android:gravity="center_vertical"
android:layoutDirection="rtl"
android:paddingLeft="40dp"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:text="Mute Sound"
android:textColor="#FFFFFF"
android:textSize="20sp"
android:textStyle="bold"
android:theme="@style/CheckBoxStyle" />
我在整个代码中放置了许多 log.d 标记,以便我观察正在发生的事情。例如,在我在 Android Studio 中冷启动应用程序后:
- 打开 MainActivity,onCreate muteSound = false
- 点击设置按钮,设置 onCreate 列出 muteSound = false
- 我选中复选框将其设置为 muteSounds = true
- 我点击设置中的返回按钮返回到 MainActivity
- MainActivity onCreate muteSound = true
- 点击设置按钮,设置 onCreate 会列出 muteSound = false
- 该复选框未选中 - 因为 muteSound = false
我无法弄清楚为什么设置没有坚持。当我检查将 muteSound 设置为 true 时,当我返回设置活动时,该设置会丢失。我已经搜索了代码以查看是否在其他地方意外设置了 muteSound = true,但是在搜索用法时我没有找到任何内容。我对 sharePreferences 的假设是否不正确。它似乎没有保存设置。或者我是否错误地使用了复选框,也许我应该在这里使用另一种类型的按钮。我想使用复选框来控制 MainActivity 和整个其他应用程序活动中分数、时间和其他项目的显示,但如果我无法弄清楚我的知识差距,我将无法做到。我做错了什么?
【问题讨论】:
-
这和 SQLite 有什么关系?
标签: android checkbox sharedpreferences