我正在尝试使用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再次为真。如何进行活动"记住"我把它改成了假?
感谢您的时间
答案 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";