2

我需要你的帮助。我正在制作一个应用程序,我使用方法onSaveInstanceState()and onRestoreInstanceState(),但第二种方法不起作用。

当按下主页按钮时,我可以看到程序如何访问 onSaveinstancestate(),但是当我返回应用程序时,代码不会调用onRestoreInstanceState()onCreate().

结果,应用程序从头开始。我不知道原因……你能帮帮我吗?

这是我的代码:

public class MainActivity extends ActionBarActivity {

MyView myView;

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        myView = new MyView(this);
        setContentView(myView);

    if (savedInstanceState != null) {
        myView .SetScore(savedInstanceState.getInt("Id"));
        myView .SetNivel(savedInstanceState.getInt("Valor"));  
    }
} 

.....

 @Override
    protected void onRestart(){
        super.onRestart();
        myView = new MyView(this);
        setContentView(myView );
    }

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState){
    super.onRestoreInstanceState(savedInstanceState);
    if (savedInstanceState != null) {
        myView.SetScore(savedInstanceState.getInt("Id"));
        myView.SetNivel(savedInstanceState.getInt("Valor"));
   }
}

@Override
protected void onSaveInstanceState(Bundle savedInstanceState){
    savedInstanceState.putInt("Score",myView.GetId());
    savedInstanceState.putInt("Nivel",muView.GetValor());
    super.onSaveInstanceState(savedInstanceState);
}
}
4

3 回答 3

1

当系统开始停止您的活动时,它会调用 onSaveInstanceState() 以便您可以指定要保存的其他状态数据,以防必须重新创建活动实例。如果活动被销毁并且必须重新创建相同的实例,系统会将定义的状态数据传递给 onCreate() 方法和 onRestoreInstanceState() 方法。

您可以查看此https://developer.android.com/training/basics/activity-lifecycle/recreating.html

您可以看到在您的方法中使用 Toast 会发生什么。

并检查此https://stackoverflow.com/a/4967491/3653989

于 2015-02-09T02:24:49.930 回答
0

onRestoreInstanceState(...)只有当活动在后台被销毁时才会被调用。如果您打开“不保存活动”开发人员选项,您可以强制执行此操作。

但这并不能解释为什么您的应用程序似乎从头开始重新启动。您确定您正在正确恢复数据吗?添加一些登录onRestoreInstanceState(...)以确保它被调用并做正确的事情。你确定你没有打电话finish()到你不应该去的地方吗,比如onPause()

于 2015-02-09T02:34:45.633 回答
-2

尝试使用带有 setRetainInstance(true) 的片段。

已编辑

在 Fragment ( http://developer.android.com/guide/components/fragments.html ) 中声明所有 UI,就像在 Activity 中一样。

public static class ExampleFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup Bundle savedInstanceState) {
        setRetainInstance(true);
        return new MyView(getActivity());
    }
}

public static class MainActivity extends ActionBarActivity {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        getSupportFragmentManager().beginTransaction().add(new ExampleFragment(), R.id.layout_where_you_want_to_display_fragment).commit();
    }
}
于 2015-02-09T01:11:50.070 回答