繁体   English   中英

savedInstanceState始终为null

[英]savedInstanceState always null

所以我的OnsavedInstanceState中有此代码

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    String [] a={"haha"};
    savedInstanceState.putStringArray("MyStringarray", a);
    Toast.makeText(context, "Saved array", Toast.LENGTH_SHORT).show();
}

我在onCreate中有这段代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if(savedInstanceState==null){
        Toast.makeText(this, "not there", Toast.LENGTH_SHORT).show();
    }else{
        Toast.makeText(this, "is there", Toast.LENGTH_SHORT).show();
    }
}

吐司为什么总是说不在那里? 我打开了该应用程序,然后切换到另一个应用程序,它显示了保存的吐司数组,但是当我重新打开该应用程序时,它说那里不存在,即使捆绑包中的字符串数组应包含“ haha​​”。

非常感谢!

onSaveInstanceState()您正在修改savedInstanceState而不是保存此修改后的对象。 如果super做了您Bundle的副本,那么它将不会保存此修改。

尝试调用super.onSaveInstanceState(savedInstanceState); 在方法末尾。

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    String [] a={"haha"};
    savedInstanceState.putStringArray("MyStringarray", a);
    super.onSaveInstanceState(savedInstanceState);
    Toast.makeText(context, "Saved array", Toast.LENGTH_SHORT).show();
}

问题可能出在清单中如何定义活动。 例如,如果您的活动设置为android:clearTaskOnLaunch =“ true”,我认为您不会收到保存的捆绑包。 有关各种活动设置的详细信息,请参见http://developer.android.com/guide/topics/manifest/activity-element.html

您可能还会检查其他替代方法。 例如,在您覆盖一个并做一些奇怪的事情时,您可能会使活动堆栈混乱。 您是否在代码中的任何地方调用finish(),如果要删除它,看看会发生什么。

请勿将此方法与活动生命周期回调(例如onPause())混淆,该回调通常在将活动放置在后台销毁过程中时调用,或者在销毁之前调用onStop() 何时调用onPause()和onStop()而不是使用此方法的一个示例是,当用户从活动B导航回活动A时: 无需在B上调用onSaveInstanceState(Bundle) ,因为该特定实例将永远不会还原,因此系统避免调用它。 调用onPause()不是onSaveInstanceState(Bundle)时的一个示例是在活动A之前启动活动B的情况:如果在活动B的生命周期内未被杀死,则系统可以避免在活动A上调用onSaveInstanceState(Bundle) A的用户界面状态将保持不变。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM