Android ToggleButton 状态长时间后重置
Android ToggleButton State reset after long time
我正在创建一个包含切换按钮的 android 应用程序。我想保留切换按钮的状态。它有效 great.If 我将切换按钮保持打开状态,然后再次返回应用程序,切换按钮保持其状态,这正是我想要的。但问题是,如果我离开应用程序很长时间,比如超过 2 小时,切换按钮状态不是 retained.ie,它会设置为默认状态。有没有什么办法解决这一问题?是的,我是 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);
}
}
共享首选项可以使用this方式。如果您的应用程序关闭并再次打开,您的 bundle 对象将被重新创建、重置。如果一个应用程序一段时间不使用或系统需要更多资源,您的应用程序可能会被杀死,这就是您的应用程序被关闭的原因。
代码:
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
}
我正在创建一个包含切换按钮的 android 应用程序。我想保留切换按钮的状态。它有效 great.If 我将切换按钮保持打开状态,然后再次返回应用程序,切换按钮保持其状态,这正是我想要的。但问题是,如果我离开应用程序很长时间,比如超过 2 小时,切换按钮状态不是 retained.ie,它会设置为默认状态。有没有什么办法解决这一问题?是的,我是 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);
}
}
共享首选项可以使用this方式。如果您的应用程序关闭并再次打开,您的 bundle 对象将被重新创建、重置。如果一个应用程序一段时间不使用或系统需要更多资源,您的应用程序可能会被杀死,这就是您的应用程序被关闭的原因。
代码:
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
}