0

我正在创建一个包含切换按钮的 android 应用程序。我想保留切换按钮的状态。而且效果很好。如果我打开切换按钮并再次返回应用程序,切换按钮会保持其状态,这就是我想要的。但问题是,如果我离开应用程序这么长时间,比如超过 2 小时,切换按钮状态不会保留。即,它设置为默认状态。有没有什么办法解决这一问题?是的,我是 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);

    }
 }
4

1 回答 1

1

可以通过这种方式使用共享首选项。如果您的应用程序关闭并再次打开,您的包对象将重新创建、重置。如果一个应用程序有一段时间没有使用或者系统需要更多资源,你的应用程序可能会被杀死,这就是你的应用程序被关闭的原因。

代码:

  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
    }
于 2015-11-25T14:18:02.197 回答