【问题标题】:Android ToggleButton State reset after long time长时间后Android ToggleButton状态重置
【发布时间】:2015-11-25 13:53:32
【问题描述】:

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

    }
 }

【问题讨论】:

  • 请出示您的代码
  • 我编辑了我的问题。这是代码
  • 在声明的 onPause 中使用的 bundle 变量在哪里?
  • 你没有在这里使用任何共享偏好?
  • 对不起,我没有发布完整的代码。但这就是我所做的。

标签: android sharedpreferences android-togglebutton


【解决方案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
    }

【讨论】:

  • 所以我应该使用共享偏好?
  • 是的,你必须使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-25
  • 1970-01-01
  • 2018-01-28
相关资源
最近更新 更多