android savedInstanceState始终为null

Kuu*_*rde 5 android

我有以下情况:

  • 活动A开始活动B.
  • 活动A调用onPause,onSaveInstanceStateonStop方法.
  • 在活动BI上,按操作栏上的"向上按钮"
  • 活动第一个被破坏(调用onDestroy),然后重新创建.(这似乎就是这样发生的.我没有实现这种方式,似乎只是Android的做事方式..)
  • 在该onCreate方法期间,变量savedInstanceState始终为null.

我知道这里有类似的话题,但他们似乎都没有对我的情况有答案.所有的回调方法都有日志行,所以我确定执行了save方法并执行了destory.但为什么从来没有一个savedInstanceState对象呢?

我的保存方法:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    savedInstanceState.putSerializable(OpenSessionsActivity.SESSION, session);
    System.out.println("saving ..");
    super.onSaveInstanceState(savedInstanceState);
}
Run Code Online (Sandbox Code Playgroud)

你还需要我包含其他代码吗?

ls.*_*nov 8

在向上导航时重新创建顶部活动.为了保持活动A的状态,你可以

A)将活动A的启动模式设置为"singleTop"(添加android:launchMode="singleTop"到AndroidManifed.xml)

要么

B)从活动B导航时FLAG_ACTIVITY_CLEAR_TOPup意图添加标志:

@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);
}
Run Code Online (Sandbox Code Playgroud)

这是一个记录在案的行为:

同样,如果您向上导航到当前堆栈上的活动,则行为由父活动的启动模式确定.如果父活动具有启动模式singleTop(或up intent包含FLAG_ACTIVITY_CLEAR_TOP),则父项将被置于堆栈顶部,并保留其状态.导航意图由父活动的onNewIntent()方法接收.如果父活动具有启动模式标准(并且向上意图不包含FLAG_ACTIVITY_CLEAR_TOP),则当前活动及其父活动都从堆栈弹出,并且创建父活动的新实例以接收导航意图.


Gre*_*nis 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);
    }
}
Run Code Online (Sandbox Code Playgroud)