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