我有以下情况:
onPause
,onSaveInstanceState
和onStop
方法。onDestroy
),然后重新创建。 (这似乎就是这样发生的。我没有实现这种方式,似乎只是Android的做事方式..)onCreate
方法中,变量savedInstanceState
始终为空。我知道这里有类似的话题,但他们似乎都没有找到我的情况的答案。所有回调方法都包含日志行,因此我确定执行了save方法并执行了destory。但为什么从来没有savedInstanceState
对象?
我的保存方法:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putSerializable(OpenSessionsActivity.SESSION, session);
System.out.println("saving ..");
super.onSaveInstanceState(savedInstanceState);
}
您还需要我包含其他代码吗?
答案 0 :(得分:8)
在向上导航时重新创建顶级活动。要保留活动A的状态,您可以
A)将活动A的启动模式设置为" singleTop" (将android:launchMode="singleTop"
添加到AndroidManifed.xml)
或
B)从活动B导航时,向FLAG_ACTIVITY_CLEAR_TOP
意图添加up
标志:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent up = NavUtils.getParentActivityIntent(this);
up.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
NavUtils.navigateUpTo(this, up);
return true;
}
return super.onOptionsItemSelected(item);
}
同样,如果您向上导航到当前堆栈上的活动,则行为由父活动的启动模式决定。如果父活动具有启动模式singleTop(或up intent包含FLAG_ACTIVITY_CLEAR_TOP),则父项将被置于堆栈顶部,并保留其状态。导航意图由父活动的onNewIntent()方法接收。如果父活动具有启动模式标准(并且向上意图不包含FLAG_ACTIVITY_CLEAR_TOP),则当前活动及其父活动都从堆栈弹出,并且创建父活动的新实例以接收导航意图。
答案 1 :(得分:7)
按操作栏上的Up
实际上与按下back
按钮不同。
如果您希望它们的行为相同,您可以在活动B中使用此代码:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
答案 2 :(得分:0)
你应该把
super.onSaveInstanceState(savedInstanceState);
在保存自己的数据代码之前。
答案 3 :(得分:0)
如上所述in the Documentation:
protected void onSaveInstanceState(Bundle outState):
不要将此方法与活动生命周期回调混淆,例如onPause(),当活动被放置在后台或去往销毁的路径时,或者在销毁之前调用的onStop()时,它会被调用。调用onPause()和onStop()时的一个示例,而不是此方法是当用户从活动B导航回活动A时:不需要在B上调用onSaveInstanceState(Bundle),因为该特定实例永远不会被恢复,所以系统避免调用它。调用onPause()而不是onSaveInstanceState(Bundle)时的一个例子是在活动A前面启动活动B的时候:如果活动A没有被杀,系统可能会避免在活动A上调用onSaveInstanceState(Bundle) B的生命周期,因为A的用户界面状态将保持不变。
如果您使用onStop()设备进行方向更改,则会调用onSavedInstanceState(...)。
答案 4 :(得分:0)
我必须添加
input_shape=(224,224,3)
x_in = Input(input_shape)
x = ZeroPadding2D(padding=(1,0), data_format='channels_last')(x_in)
x = Flatten()(x)
x = Dense(4, activation='softmax')(x)
test_model = Model(inputs=x_in, outputs=x)
test_model.summary()
进入清单文件的活动部分以使其正常工作。然后我只需要
android:launchMode="singleTop"