0

我在使用 onRestoreInstanceState() 方法时遇到了一些问题。这个 SumWindow 活动向用户显示了一些问题,并将用户的分数存储在变量 try 和 rights 中。问题:如果用户按下回,然后从主菜单用户按下“播放!” (SumWindow 活动创建的地方)分数被重置为 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");
        }
4

2 回答 2

0

问题可能是在 OnRestoreInstanceState 中,您没有检查 savedInstanceState 是否为空。你应该改变:

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

对不起我的英语不好!

于 2013-07-22T10:33:15.117 回答
0

onSaveInstanceState()当用户按下 BACK 时不调用。

当用户更改配置时调用它。

我在这里看到的明显解决方案是保存您的值是用户按下返回键时的偏好。您可以使用以下代码段(仅供参考)

@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 检查是否有任何值存在于偏好中,如果存在则恢复它们。

于 2013-07-22T10:49:32.980 回答