Android ToggleButton 切换状态问题
Android ToggleButton toggle state issue
我是 android 的新手。我正在创建一个使用切换按钮的应用程序。我希望切换按钮在按钮处于选中状态时执行一些任务,并在按钮未选中时执行其他任务。而且我希望切换按钮即使在用户关闭应用程序(通过按下后退开关)并返回时也能保持其状态。我设法通过使用共享首选项来完成它,但问题是当用户打开切换按钮并返回并再次返回时,任务再次完成。有没有办法让我的切换按钮保持在状态,而不是与之相关的任务?抱歉我的英语不好:)
public class MainActivity extends AppCompatActivity {
ToggleButton onoff;
public static Bundle bundle=new Bundle();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
onoff = (ToggleButton) findViewById(R.id.toggleButton);
onoff.setChecked(false);
onoff.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
// do some tasks here
} else {
//do some tasks here
}
}
});
}
@Override
public void onPause(){
super.onPause();
bundle.putBoolean("ToggleButtonState", onoff.isChecked());
}
@Override
public void onResume(){
super.onResume();
if(bundle.getBoolean("ToggleButtonState",false))
{
onoff.setChecked(true);
}
}
}``
只需向您的 OnCheckedChangeListener 添加另一个条件:
onoff.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked && !bundle.getBoolean("ToggleButtonState",false) {
// do some tasks here
} else if(!isChecked){ //optional + , your preference on what to to :)
//do some tasks here
}
}
});
因此,当您 return 并且您的按钮被选中,但您保存的布尔值也为真时,它不会执行您的任务。
编辑:
用于 onSaveInstanceState
:
在您的 activity 中,添加以下方法:
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putBoolean("ToggleButtonState", onoff.isChecked());
super.onSaveInstanceState(outState);
}
并在 onCreate()
中检索此布尔值,在 findViewById(...)
下:
boolean checkedStatus = savedInstanceState.getBoolean("ToggleButtonState", false);
onoff.setChecked(checkedStatus);
更多信息请访问Recreating an Activity
我是 android 的新手。我正在创建一个使用切换按钮的应用程序。我希望切换按钮在按钮处于选中状态时执行一些任务,并在按钮未选中时执行其他任务。而且我希望切换按钮即使在用户关闭应用程序(通过按下后退开关)并返回时也能保持其状态。我设法通过使用共享首选项来完成它,但问题是当用户打开切换按钮并返回并再次返回时,任务再次完成。有没有办法让我的切换按钮保持在状态,而不是与之相关的任务?抱歉我的英语不好:)
public class MainActivity extends AppCompatActivity {
ToggleButton onoff;
public static Bundle bundle=new Bundle();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
onoff = (ToggleButton) findViewById(R.id.toggleButton);
onoff.setChecked(false);
onoff.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
// do some tasks here
} else {
//do some tasks here
}
}
});
}
@Override
public void onPause(){
super.onPause();
bundle.putBoolean("ToggleButtonState", onoff.isChecked());
}
@Override
public void onResume(){
super.onResume();
if(bundle.getBoolean("ToggleButtonState",false))
{
onoff.setChecked(true);
}
}
}``
只需向您的 OnCheckedChangeListener 添加另一个条件:
onoff.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked && !bundle.getBoolean("ToggleButtonState",false) {
// do some tasks here
} else if(!isChecked){ //optional + , your preference on what to to :)
//do some tasks here
}
}
});
因此,当您 return 并且您的按钮被选中,但您保存的布尔值也为真时,它不会执行您的任务。
编辑:
用于 onSaveInstanceState
:
在您的 activity 中,添加以下方法:
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putBoolean("ToggleButtonState", onoff.isChecked());
super.onSaveInstanceState(outState);
}
并在 onCreate()
中检索此布尔值,在 findViewById(...)
下:
boolean checkedStatus = savedInstanceState.getBoolean("ToggleButtonState", false);
onoff.setChecked(checkedStatus);
更多信息请访问Recreating an Activity