有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

首选项活动中的java静音音频

我对Java开发相当陌生,我开始构建一个简单的Android应用程序。 我的主要活动创建了一个名为“GameView”的SurfaceView,我在其中创建了弹跳球。还创建了一个选项菜单(在my Main活动中),其中有一个“设置”项。点击设置按钮时,一个新的PreferenceActivity开始,称为SettingsActivity。在“设置”菜单中,我必须选中一些简单的复选框,这些复选框必须控制背景音乐和声音效果(静音/取消静音)

设置中的我的复选框。xml:

<CheckBoxPreference
     安卓:summary="Turn music on or off"
     安卓:defaultValue="true"
     安卓:title="Music"
     安卓:key="musicPref" 
/>
<CheckBoxPreference
     安卓:summary="Turn sounds on or off"
     安卓:defaultValue="true"
     安卓:title="Sounds"
     安卓:key="soundPref" 
/> 

为了获得复选框的值,我在我的公共GameView函数中使用了以下代码:

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
musicPlaying = sharedPrefs.getBoolean("musicPref", true );
soundPlaying = sharedPrefs.getBoolean("soundPref", true );

编辑: 我是否必须在我的设置菜单中定义一个点击事件,才能将更改后的复选框值传递给我的游戏视图

如何将更改后的值传递给gameview


共 (2) 个答案

  1. # 1 楼答案

    您正在使用SharedReferences读取设置,因此需要在其中写入值,例如:

    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();
    

    如果有多个进程(如服务)访问SharedReference,则需要MODE_MULTI_PROCESS标记,以强制android每次清理缓存的值

  2. # 2 楼答案

    谢谢乔安米让我走上正轨。我做了一些广泛的研究,结果表明在首选项活动中所做的更改会自动保存。不需要侦听器,因此使用:

    SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); musicPlaying = sharedPrefs.getBoolean("musicPref", true ); soundPlaying = sharedPrefs.getBoolean("soundPref", true );

    在我的游戏视图中足以检查我的首选项活动的更改