Java onRestoreInstanceState()是如何工作的?
我需要你的帮助。我正在制作一个应用程序,我使用了saveInstanceState和onRestoreInstanceState方法,但第二种方法不起作用 当按下home按钮时,我可以看到程序如何访问onSaveinstancestate,但当我返回应用程序时,代码不会调用onRestoreInstanceState或onCreate 因此,应用程序从零开始。我不知道原因。。。你能帮我吗 这是我的代码:Java onRestoreInstanceState()是如何工作的?,java,android,android-activity,activity-lifecycle,onrestoreinstancestate,Java,Android,Android Activity,Activity Lifecycle,Onrestoreinstancestate,我需要你的帮助。我正在制作一个应用程序,我使用了saveInstanceState和onRestoreInstanceState方法,但第二种方法不起作用 当按下home按钮时,我可以看到程序如何访问onSaveinstancestate,但当我返回应用程序时,代码不会调用onRestoreInstanceState或onCreate 因此,应用程序从零开始。我不知道原因。。。你能帮我吗 这是我的代码: public class MainActivity extends ActionBarAct
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);
}
}
尝试将片段与setRetainInstancetrue一起使用 编辑 在片段中声明所有UI,就像在活动中一样
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();
}
}
尝试将片段与setRetainInstancetrue一起使用 编辑 在片段中声明所有UI,就像在活动中一样
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();
}
}
当系统开始停止您的活动时,它会调用onSaveInstanceState,以便您可以指定要保存的其他状态数据,以防必须重新创建活动实例。如果活动已销毁且必须重新创建同一实例,则系统会将定义的状态数据传递给onCreate方法和onRestoreInstanceState方法 你可以查一下 你可以在你的方法中看到祝酒会发生什么
当系统开始停止您的活动时,选中此复选框,它将调用SaveInstanceState,以便您可以指定要保存的其他状态数据,以防必须重新创建活动实例。如果活动已销毁且必须重新创建同一实例,则系统会将定义的状态数据传递给onCreate方法和onRestoreInstanceState方法 你可以查一下 你可以在你的方法中看到祝酒会发生什么 并在RestoreInstanceState上选中此项。。。仅当活动在后台被销毁时才会调用。如果启用“不保存活动开发人员”选项,则可以强制执行此操作 但这并不能解释为什么你的应用程序看起来是从零开始重新启动的。您确定恢复的数据正确吗?在RestoreInstanceState中添加一些日志。。。确保它被呼叫并做正确的事情。你确定你没有在不该在的地方调用finish,比如onPause?onrestoreinnstancestate。。。仅当活动在后台被销毁时才会调用。如果启用“不保存活动开发人员”选项,则可以强制执行此操作
但这并不能解释为什么你的应用程序看起来是从零开始重新启动的。您确定恢复的数据正确吗?在RestoreInstanceState中添加一些日志。。。确保它被呼叫并做正确的事情。你确定你没有在不该在的地方调用finish,比如onPause吗?这个问题可以帮助你检查它们是否没有被调用?在代码中,使用不同的键进行保存,然后用于还原。当按HOME键然后返回到应用程序时,应用程序应仍处于与离开应用程序时相同的状态,因此没有理由调用onRestoreInstanceState。问题是什么?这个问题可能会帮助您检查它们是否未被调用?在代码中,使用不同的键进行保存,然后用于还原。当按HOME键然后返回到应用程序时,应用程序应仍处于与离开应用程序时相同的状态,因此没有理由调用onRestoreInstanceState。问题是什么?虽然这可以解决问题,但你应该详细说明在哪里、如何以及为什么这样做。虽然这可以解决问题,但你应该详细说明在哪里、如何以及为什么这样做。