Android ToggleButton状态很长一段时间后重置

时间:2015-11-25 13:53:33

标签: android sharedpreferences android-togglebutton

我正在创建一个包含切换按钮的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);

    }
 }

1 个答案:

答案 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
    }