【问题标题】:How to save the state of an Android CheckBox when the users exits the application?用户退出应用程序时如何保存 Android CheckBox 的状态?
【发布时间】: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;
}

【问题讨论】:

    标签: android checkbox reload exit savestate


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

    【讨论】:

      猜你喜欢
      • 2013-09-05
      • 1970-01-01
      • 2016-07-27
      • 1970-01-01
      • 2014-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多