我需要你的帮助。我正在创建一个应用程序,我使用方法onSaveInstanceState()
和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);
}
}
答案 0 :(得分:1)
当系统开始停止您的活动时,它会调用onSaveInstanceState(),以便您可以指定要在必须重新创建Activity实例时保存的其他状态数据。如果活动被销毁并且必须重新创建相同的实例,系统会将定义的状态数据传递给onCreate()方法和onRestoreInstanceState()方法。
您可以查看https://developer.android.com/training/basics/activity-lifecycle/recreating.html
您可以在方法中查看Toast会发生什么。
答案 1 :(得分:0)
onRestoreInstanceState(...)
。如果您打开“不要保存活动”,可以强制执行此操作。开发者选项。
但这并不能解释为什么你的应用似乎从头开始重启。您确定要正确恢复数据吗?在onRestoreInstanceState(...)
中添加一些日志记录,以确保它被调用并做正确的事情。你确定你不会在finish()
之外的某个地方打电话给onPause()
吗?
答案 2 :(得分:-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();
}
}