我在Java开发方面相当新,我开始构建一个简单的Android应用程序。 我的MainActivity创建了一个名为' GameView'在那里我创造了弹跳球。还会创建一个选项菜单(在我的MainActivity中),该菜单具有“设置”功能。项目。点击设置按钮时,会启动一个名为SettingsActivity的新PreferenceActivity。在设置菜单中,我必须使用简单的复选框来控制背景音乐和声音效果(静音/取消静音)。
我在settings.xml中的复选框:
<CheckBoxPreference
android:summary="Turn music on or off"
android:defaultValue="true"
android:title="Music"
android:key="musicPref"
/>
<CheckBoxPreference
android:summary="Turn sounds on or off"
android:defaultValue="true"
android:title="Sounds"
android:key="soundPref"
/>
我在公共GameView函数中使用了以下代码,以获取复选框的值:
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
musicPlaying = sharedPrefs.getBoolean("musicPref", true );
soundPlaying = sharedPrefs.getBoolean("soundPref", true );
修改 我是否必须在设置菜单中定义点击事件才能将复选框的更改值传递给我的游戏视图?
如何将更改后的值传递给我的游戏视图?
答案 0 :(得分:0)
您正在使用SharedPreferences来读取设置,因此您需要在那里写下值,例如:
ToggleButton tBsound;
tBsound.setChecked(sharedPrefs.getBoolean("soundPref",true));
SharedPreferences.Editor editor=sharedPrefs.edit();
tBsound.setOnClickListener(new OnClickListener() {
@Override public void onClick(View v) {
//save settings
if (tBsound.isChecked()) editor.putBoolean("soundPref",true);
else editor.putBoolean("soundPref",false);
editor.commit();
}
});
此示例使用ToggleButton,如果您使用复选框,只需相应地更改它。用于编写设置的隔离代码如下所示:
if (Build.VERSION.SDK_INT>=11)
mySettings = getSharedPreferences(PREFS, MODE_MULTI_PROCESS);
else mySettings = getSharedPreferences(PREFS,0);
SharedPreferences.Editor editor = mySettings.edit();
editor.putBoolean("data",true);
editor.commit();
如果有多个进程(如服务)访问SharedPreferences,则需要MODE_MULTI_PROCESS
标记,以强制android每次都清理缓存的值。
答案 1 :(得分:0)
感谢Joanmi让我走上正轨。我做了一些广泛的研究,结果发现PreferenceActivity中的更改会自动保存。不需要听众,所以使用:
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
musicPlaying = sharedPrefs.getBoolean("musicPref", true );
soundPlaying = sharedPrefs.getBoolean("soundPref", true );
就足以检查我的PreferenceActivity中的变化。