正确使用Android onSaveInstanceState()

时间:2013-07-22 10:28:03

标签: android save bundle state

我遇到了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");
        }

2 个答案:

答案 0 :(得分:0)

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

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

抱歉我的英文!

答案 1 :(得分:0)

当用户按下BACK时,

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内部检查是否有任何值优先存在,如果是,则恢复它们。