我正在创建一个包含切换按钮的Android应用程序。我想保留togglebutton的状态。它工作得很好。如果我将togglebutton打开并再次返回应用程序,togglebutton会保留其状态,这就是我想要的。但问题是,如果我离开应用程序这么长时间,比如超过2个小时,则不会保留togglebutton状态。它会设置为默认状态。有没有什么办法解决这一问题?是的我是android的新手:)
继承我的代码
public static Bundle bundle=new Bundle();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_page3);
onoff = (ToggleButton) findViewById(R.id.toggleButton);
onoff.setChecked(false);
onoff.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if (isChecked && !bundle.getBoolean("ToggleButtonState",false))
{
//do some tasks
} else if(!isChecked) {
//do some tasks
}
@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);
}
}
答案 0 :(得分:1)
共享偏好设置可以this方式使用。如果您的应用已关闭并再次打开,则会重新创建并重置您的捆绑包对象。如果某个应用程序暂时不使用或系统需要更多资源,您的应用程序可能会被终止,这就是您的应用程序关闭的原因。
代码:
private ToggleButton mTb;
private SharedPreferences mSharedPref;
private final String mPrefKey="toogle";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTb= (ToggleButton) findViewById(R.id.toggleButton); // get ref for the toggle
mSharedPref = getPreferences(Context.MODE_PRIVATE); // init the sharedPreference
}
@Override
protected void onResume() {
super.onResume();
// if the activty resumes set the toggle state
boolean enabled = mSharedPref.getBoolean(mPrefKey,false); // if no value found then set it off, in this case this can happen first
mTb.setChecked(enabled);
}
@Override
protected void onPause() {
super.onPause();
// if the activty closed etc.....
SharedPreferences.Editor editor = mSharedPref.edit(); // get the pref editor
editor.putBoolean(mPrefKey,mTb.isChecked()); // assign value to the key
editor.commit(); // save the editors modifications
}