[英]Testing a Fragment's onCreate method with a savedInstanceState Bundle in Robolectric?
[英]What's onCreate(Bundle savedInstanceState)
谁能帮助我了解的Bundle savedInstanceState
中onCreate(Bundle savedInstanceState)
我在Android的新手。 我试着从 developer.android.com 理解它。 但我无法理解。 任何人都可以简化它吗?
如果您将应用程序的状态保存在一个包中(通常是onSaveInstanceState
非持久性动态数据),如果需要重新创建活动(例如,方向更改),则可以将其传递回onCreate
,这样您就不会丢失这个先验信息。 如果未提供数据,则savedInstanceState
为空。
...您应该使用 onPause() 方法将任何持久数据(例如用户编辑)写入存储。 此外,在将活动置于这种后台状态之前调用方法 onSaveInstanceState(Bundle),允许您将活动中的任何动态实例状态保存到给定的 Bundle 中,以便稍后在 onCreate(Bundle) 中接收,如果活动需要重新创建。 有关流程的生命周期如何与其托管的活动相关联的更多信息,请参阅流程生命周期部分。 请注意,在 onPause() 而不是 onSaveInstanceState(Bundle) 中保存持久数据很重要,因为后者不是生命周期回调的一部分,因此不会在其文档中描述的所有情况下都被调用。
onCreate(Bundle savedInstanceState)
当活动第一次开始时你会得到Bundle
null,当活动方向改变时它会被使用......
http://www.gitshah.com/2011/03/how-to-handle-screen-orientation_28.html
Android 提供了另一种优雅的方式来实现这一点。 为了实现这一点,我们必须重写一个名为onSaveInstanceState()
的方法。 Android 平台允许用户保存任何实例状态。 实例状态可以保存在 Bundle 中。 Bundle 作为参数传递给 onSaveInstanceState 方法。
我们可以从作为参数传递给onCreate
方法的 Bundle 加载保存的实例状态。 我们还可以在onRestoreInstanceState
方法中加载保存的实例状态。 但我会把它留给读者去弄清楚。
正如 Dhruv Gairola 回答的那样,您可以使用 Bundle savedInstanceState 来保存应用程序的状态。 我试图举一个非常简单的例子,像我这样的新学习者可以很容易地理解。
假设您有一个带有 TextView 和 Button 的简单片段。 每次单击按钮时,文本都会更改。 现在,改变你的设备/模拟器的方向,并注意到你丢失了数据(意味着点击后你得到了更改的数据)并且片段再次作为第一次启动。 通过使用 Bundle savedInstanceState 我们可以摆脱这个。 如果你看一下片段的生命周期。 Fragment Lifecylce你会得到一个方法“onSaveInstanceState”在片段即将被销毁时被调用。
所以,我们可以像这样保存状态意味着改变的文本值到那个包中
int counter = 0;
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("value",counter);
}
确定方向后,将调用“onCreate”方法对吗? 所以我们可以这样做
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState == null){
//it is the first time the fragment is being called
counter = 0;
}else{
//not the first time so we will check SavedInstanceState bundle
counter = savedInstanceState.getInt("value",0); //here zero is the default value
}
}
现在,您不会在定向后失去价值。 将始终显示修改后的值。
Android 中的 onCreate(Bundle savedInstanceState) 函数:
当 Activity 首次调用或启动时,onCreate(Bundle savedInstanceState) 方法负责创建该 Activity。
当活动的方向(即从水平到垂直或从垂直到水平)改变或当活动被任何操作系统强行终止时,savedInstanceState 即捆绑类的对象将保存活动的状态。
Orientation 更改后,onCreate(Bundle savedInstanceState) 将调用并重新创建活动并从savedInstanceState 加载所有数据。
基本上 Bundle 类用于在应用程序中发生上述情况时存储活动数据。
应用程序不需要 onCreate()。 但是在 app 中使用它的原因是因为该方法是放置初始化代码的最佳位置。
您也可以将初始化代码放在 onStart() 或 onResume() 中,当您的应用程序首先加载时,它的工作方式与 onCreate() 中的相同。
onCreate(Bundle)
在活动第一次启动时被调用。 您可以使用它来执行一次性初始化,例如创建用户界面。 onCreate()
接受一个参数,该参数为 null 或一些先前由onSaveInstanceState
保存的状态信息。
onCreate(Bundle savedInstanceState) 被调用并且如果您的活动在上述场景(可视化视图)中终止,则savedInstanceState 将是非空的。 然后,您的应用程序可以从savedInstanceState 中抓取(捕获)数据并重新生成您的活动
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.