在我的应用程序中,我使用一个checkBox,当选中它时,会播放一段音乐。 但是,当用户移至另一个活动,然后返回到该复选框所在的活动时,该复选框将处于未选中状态。 为了停止音乐,您必须再次选中复选框,然后取消选中它。 在活动之间移动时,如何保存checkBox的状态不变?
This is my XML code:
<CheckBox
android:id="@+id/chk_box_music"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:layout_marginTop="4dp"
android:layout_marginLeft="12dp"
android:layout_gravity="center"
android:layout_marginStart="12dp"/>
This is my JAVA code:
CheckBox checkBox = (CheckBox) findViewById(R.id.chk_box_music);
checkBox.setOnCheckedChangeListener(new
CompoundButton.OnCheckedChangeListener({
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if(b == true){
startService(new Intent(SettingsActivity.this, MyService.class));
}else{ stopService(new Intent(SettingsActivity.this, MyService.class));
}
}
});
答案 0 :(得分:0)
您可以将CheckBox状态保存在:
onSaveInstanceState(Bundle)
,然后在onCreate(Bundle)
中获得该值/标志。答案 1 :(得分:0)
您可以覆盖活动的onResume方法。再次恢复活动时将调用此方法。因此,在此方法中,您可以设置复选框状态,无论您要设置什么,例如
@Override
protected void onResume() {
super.onResume();
checkBox.setChecked(true); // or false, according to your logic
}
如果您要发送/接收来自另一个活动的某些信息,则需要启动活动以获得结果并处理其结果。它的帮助是here
编辑:
另一种最简单的方法是将信息保存在“共享首选项”中,例如
@Override
protected void onResume() {
super.onResume();
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
boolean isChecked = pref.getBoolean("isChecked", false);
checkBox.setChecked(isChecked); // or false, according to your logic
// And on checked change update shared Preferences
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
pref.edit().putBoolean("isChecked",isChecked).commit();
}
});
}
现在您已告诉您要在关闭应用程序时清除复选框,以便下次用户进入时应清除该复选框。对于“销毁同一活动”方法中的更新SharedPreferences(存在复选框)。
@Override
public onDestroy() {
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
pref.edit().putBoolean("isChecked",false).commit();
super.onDestroy();
}