我遇到了onRestoreInstanceState()方法的一些问题。 此SumWindow活动向用户显示一些问题,并将用户的分数存储在变量尝试和权限中。问题:如果用户按下然后从主菜单按下“播放!” (SumWindow活动创建的地方)分数被重置为0中的0。我确定我遗漏了这个保存/加载的基本内容。这是我的代码(为简化阅读而简化)
public class SumWindow extends Activity implements OnClickListener {
int tries;
int rights;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
tries = savedInstanceState.getInt("tries");
right = savedInstanceState.getInt("right");
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putInt("tries", tries);
savedInstanceState.putInt("rights", rights);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
tries = savedInstanceState.getInt("tries");
right = savedInstanceState.getInt("rights");
}
答案 0 :(得分:0)
问题可能是在OnRestoreInstanceState中你没有检查savedInstanceState是否为null。 你应该改变:
if(savedInstanceState!=null){
tries = savedInstanceState.getInt("tries");
right = savedInstanceState.getInt("rights");
}
抱歉我的英文!
答案 1 :(得分:0)
onSaveInstanceState()
不会被调用。
当用户更改配置时调用它。
我在这里看到的显而易见的解决方案是在用户按下键时保存您的值是首选项。您可以使用以下代码段(仅供参考)
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
//save values in preference
return true;
}
return super.onKeyDown(keyCode, event);
}
在onCreate内部检查是否有任何值优先存在,如果是,则恢复它们。