Android onSaveInstanceState()的正确使用

Android onSaveInstanceState()的正确使用,android,save,bundle,state,Android,Save,Bundle,State,onRestoreInstanceState()方法遇到一些问题。 此SumWindow活动向用户显示一些问题,并将用户的分数存储在变量trytes和rights中。问题:如果用户按下后退键,然后从主菜单中按下“播放!”(SumWindow活动将在此处创建),则分数将重置为0分之0。我确信我在保存/加载这件事上遗漏了一些基本的东西。这是我的代码(为便于阅读而简化) 可能问题在于,在OnRestoreInstanceState中,您没有检查savedInstanceState是否为null。 您应

onRestoreInstanceState()方法遇到一些问题。 此SumWindow活动向用户显示一些问题,并将用户的分数存储在变量trytes和rights中。问题:如果用户按下后退键,然后从主菜单中按下“播放!”(SumWindow活动将在此处创建),则分数将重置为0分之0。我确信我在保存/加载这件事上遗漏了一些基本的东西。这是我的代码(为便于阅读而简化)


可能问题在于,在OnRestoreInstanceState中,您没有检查savedInstanceState是否为null。 您应更改为:

if(savedInstanceState!=null){
  tries = savedInstanceState.getInt("tries");
  right = savedInstanceState.getInt("rights");
}

对不起我的英语

onSaveInstanceState()
在用户按下后不会被调用。

当用户更改配置时调用它

我在这里看到的一个明显的解决方案是,当用户按back键时,保存您的值是首选项


在onCreate内部,检查是否存在任何首选值,如果存在,则恢复它们。

感谢您提供的提示!我设法使用了一个将分数保持在静态变量中的类。这是邪恶的,不是面向对象的,但这就是我要处理的。我将尝试实施你的建议。这个周末我要尝试这个关键事件。非常感谢。
if(savedInstanceState!=null){
  tries = savedInstanceState.getInt("tries");
  right = savedInstanceState.getInt("rights");
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        //save values in preference
        return true;
    }

    return super.onKeyDown(keyCode, event);
}