使用boolean的自定义静音ImageButton保持更改为true

时间:2015-06-09 13:32:41

标签: android

我正在尝试使用2个不同的背景图像(声音打开和关闭)制作静音ImageButton。

这是我的代码

public class StartActivity extends Activity implements OnClickListener{

public boolean IsAudioOn = true;

static AudioManager amanager;
ImageButton playBtn, muteBtn, rulesBtn;


@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_start);

    playBtn = (ImageButton) findViewById(R.id.playBtn);
    playBtn.setOnClickListener(this);
    muteBtn = (ImageButton) findViewById(R.id.muteBtn);
    muteBtn.setOnClickListener(this);
    rulesBtn = (ImageButton) findViewById(R.id.rulesBtn);
    rulesBtn.setOnClickListener(this);          
}

public void onClick(View v) {
    Intent i;   

    switch (v.getId())
    {
    case R.id.playBtn : 
                        i = new Intent(this, QuizActivity.class);
                        startActivity(i);
                        finish();
                        break;
    case R.id.rulesBtn :
                        i = new Intent(this, RulesActivity.class);
                        startActivity(i);
                        break;
    case R.id.muteBtn :                 

                        if(IsAudioOn){                                  
                              mute();
                        }
                        else {
                             unmute();
                        }       
    }
}
public void unmute() {
    //for unmute
    amanager = null;
    amanager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);        
    amanager.setStreamVolume(AudioManager.STREAM_MUSIC, 10, 10);        
    IsAudioOn = true;        
    muteBtn.setBackgroundResource(R.drawable.sound);        
}

public void mute() {
    // for mute
    amanager = null;
    amanager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);        
    amanager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0);
    IsAudioOn = false;
    muteBtn.setBackgroundResource(R.drawable.nosound);
    }  }

静音和图像的变化似乎可以正常工作。问题是,当我选择其他按钮之一,播放和规则,这导致其他活动(在我按下静音后)然后返回到StartActivity,布尔IsAudioOn再次为真。如何进行活动"记住"我把它改成了假?

感谢您的时间

1 个答案:

答案 0 :(得分:2)

您必须保存实例状态,因为您的活动可以在后台销毁并重新创建。在这种情况下,您的布尔值isAudioOn将重置为true。

为此,重写此方法

@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
    super.onSaveInstanceState(outState, outPersistentState);
    outState.putBoolean(STATE_IS_AUDIO_ON_KEY, IsAudioOn);
}

然后,您可以在onCreate方法中检索此值

if (savedInstanceState != null) {
    IsAudioOn = savedInstanceState.getBoolean(STATE_IS_AUDIO_ON_KEY, true)
}

有关详细信息,请参阅此documentation

不要忘记添加键常量,例如

private static final String STATE_IS_AUDIO_ON_KEY = "STATE_IS_AUDIO_ON_KEY";