Держите переключатель проверенным в приложении Android - PullRequest
1 голос
/ 03 мая 2020

В моем приложении Android есть переключатель. Я хочу оставить это проверенным, пока я не выключу его (даже если я снова нажму или открою другое приложение). Ниже приведен код, который я попробовал.

mWorkingSwitch = (Switch) findViewById(R.id.workingSwitch);
SharedPreferences prefs = getSharedPreferences("com.bitproject.driverapplication", MODE_PRIVATE);
boolean switchState = prefs.getBoolean("service_status", false);
mWorkingSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
      @Override
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
         if (isChecked) {
             connectDriver();
         } else {
             disconnectDriver();
         }
     }
});
mWorkingSwitch.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
         SharedPreferences.Editor editor = getSharedPreferences("com.bitproject.driverapplication", MODE_PRIVATE).edit();
         editor.putBoolean("service_status", mWorkingSwitch.isChecked());
         editor.commit();
     }
});

Когда я нажал (когда переключатель проверен), и снова go для этого действия (где переключатель находится), этот переключатель отключился.

Я хочу оставить его включенным, пока не выключу его. Есть несколько похожих вопросов, но я не могу понять, как связать их с моей проблемой. Я новичок в Android.

Ответы [ 3 ]

1 голос
/ 03 мая 2020

Вы также должны восстановить его состояние также в методе onCreate после назначения switchState:

mWorkingSwitch.setChecked(switchState);
1 голос
/ 03 мая 2020

Хорошо, здесь фиксированный код, вы должны сохранять состояние в OnCheckedChangeListener и возвращать состояние обратно с помощью mWorkingSwitch.setChecked(switchState);

mWorkingSwitch = (Switch) findViewById(R.id.workingSwitch);
SharedPreferences prefs = getSharedPreferences("com.bitproject.driverapplication", MODE_PRIVATE);
boolean switchState = prefs.getBoolean("service_status", false);
 mWorkingSwitch.setChecked(switchState);
mWorkingSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
      @Override
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
         if (isChecked) {
             connectDriver();
         } else {
             disconnectDriver();
         }

 SharedPreferences.Editor editor = getSharedPreferences("com.bitproject.driverapplication", MODE_PRIVATE).edit();
         editor.putBoolean("service_status",isChecked);
         editor.commit();
     }
});

Вы не должны устанавливать OnClickListener для переключателя

1 голос
/ 03 мая 2020

Сохранить состояние в общих настройках в setOnCheckedChangeListener:

......
......               
if (isChecked) {
connectDriver();

//switch is checked
SharedPreferences.Editor editor = getSharedPreferences("switch", MODE_PRIVATE).edit();
editor.putString("state", "checked");
editor.apply();

} else {
disconnectDriver();

//switch is unchecked
SharedPreferences.Editor editor = getSharedPreferences("switch", MODE_PRIVATE).edit();
editor.putString("state", "unchecked");
editor.apply();
}
......
...... 

Сейчас в onStart() метод деятельности:

@Override
protected void onStart(){
super.onStart();

//read the state
SharedPreferences pref = getSharedPreferences("switch", MODE_PRIVATE); 
String state = pref.getString("state", "default");

if(state.equals("checked")){

//it was checked

mWorkingSwitch.setChecked(true);

}else{

//it was unchecked

mWorkingSwitch.setChecked(false);

}

}
...