在活动之间移动时如何保存复选框状态?

时间:2019-04-13 09:58:18

标签: android

在我的应用程序中,我使用一个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));
}
}
});

2 个答案:

答案 0 :(得分:0)

您可以将CheckBox状态保存在:

  1. 共享的首选项
  2. 捆绑onSaveInstanceState(Bundle),然后在onCreate(Bundle)中获得该值/标志。
  3. 本地数据库(使用Room,SQLite或任何其他工具)

答案 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();
 }