在Android应用程序中检查开关



我的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();
}
});

当我反向按压(检查开关时(,然后再次进入该活动(开关所在的位置(时,该开关已关闭。

我想一直开着,直到我把它关掉。还有一些类似的问题,但我不明白如何将它们与我的问题联系起来。我是安卓系统的新手。

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);
}
}

在分配switchState后,您还应该在onCreate方法中恢复其状态:

mWorkingSwitch.setChecked(switchState);

好的,这是固定的代码,您应该将状态保存在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();
}
});

您不应该为交换机设置ClickListener

最新更新