用户退出应用程序时如何保存 Android CheckBox 的状态?

Posted

技术标签:

【中文标题】用户退出应用程序时如何保存 Android CheckBox 的状态?【英文标题】:How to save the state of an Android CheckBox when the users exits the application? 【发布时间】:2011-08-07 06:20:40 【问题描述】:

有什么方法可以在用户退出应用程序时保存复选框的状态(选中或未选中),以便在应用程序重新启动时重新加载此状态?

@Override
public void onPause()


    super.onPause();
    save(itemChecked);

@Override
public void onResume()

    super.onResume();
    checkOld = load();

    for (int i = 0 ; i < checkOld.length; i++)
    
        notes.ctv.get(i).setChecked(checkOld[i]);
    

@Override
public void onRestart()

    super.onResume();
    checkOld = load();

    for (int i = 0 ; i < checkOld.length; i++)
    
        notes.ctv.get(i).setChecked(checkOld[i]);
    


private void save(final boolean[] isChecked) 
SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
 insertState();
 for(Integer i = 0; i < isChecked.length; i++)
 
     editor.putBoolean(i.toString(), isChecked[i]);
 
editor.commit();


private boolean[] load() 
SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE);
    boolean [] reChecked = new boolean[itemChecked.length];
    for(Integer i = 0; i < itemChecked.length; i++)
    
         reChecked[i] = sharedPreferences.getBoolean(i.toString(), false);
    
    return reChecked;

【问题讨论】:

【参考方案1】:

组合 onPause()onResume() 以保存和加载您的 CheckBox 值。

示例代码:

@Override
public void onPause() 
    super.onPause();
    save(mCheckBox.isChecked());


@Override
public void onResume() 
    super.onResume();
    mCheckBox.setChecked(load());


private void save(final boolean isChecked) 
    SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putBoolean("check", isChecked);
    editor.commit();


private boolean load()  
    SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE);
    return sharedPreferences.getBoolean("check", false);

【讨论】:

@Viktor 我选择了您的解决方案,但正如您所见,我提到了 CheckBoxes,所以我稍微更改了您的代码以使其适应布尔数组,但尽管我检查了一些,但我仍然没有选中所有复选框在关闭应用程序之前。知道为什么吗?我什至尝试将 onResume 代码放在 onRestart 函数中,但它仍然无法正常工作。请帮忙。 @Viktor 完成。现在请检查我在哪里做错了。 .我也添加了我的适配器的代码,所以你可以很容易地理解我的工作。在上面的代码注释中是我的适配器的一个实例。我还有一个问题我需要在我的 onCreate 函数中执行一些额外的操作,比如检查是否有任何 SharedPreference 然后加载它或类似的东西 @Varundroid: onResume()onCreated() 之后调用,因此不需要签入onCreate()。我在您的代码中可以看到,您正在正确加载和保存。你确定你的CheckBoxes 的 id 是正确的吗? @Viktor 是的,我希望如此,因为这是我在布尔数组中存储值的方式:- public boolean[] insertState() int size = notes.getCount(); for(int i = 0; i 【参考方案2】:

我相信 google notepad3 教程解释了保存和恢复状态http://developer.android.com/resources/tutorials/notepad/notepad-ex3.html

在 onSaveInstanceState() 中保存状态包,然后在 onStart() 中获取该包

希望有帮助

编辑:也检查这个,它更简洁。 onSaveInstanceState () and onRestoreInstanceState ()

【讨论】:

以上是关于用户退出应用程序时如何保存 Android CheckBox 的状态?的主要内容,如果未能解决你的问题,请参考以下文章

退出时如何保存 Activity 的状态?安卓

Android:尝试将图像保存到 SD 卡时应用程序退出

应用程序意外退出时防止数据损坏

当用户退出应用程序时保存核心数据?

Spotify android 应用程序如何保存当前的音乐播放时间?就像您退出应用程序并在前几天打开它一样?

如何处理后退按钮android以退出应用程序并在首页中打开时关闭本机导航侧菜单