2014-12-29 142 views
0

我遇到了onSaveInstanceState问题,但可能是因为我误解了它的工作原理。如何初始化onSaveInstanceState?

我有一个Arraylist我想保存当我切换活动,然后恢复当我回来。

,所以我有这个方法

@Override 
protected void onSaveInstanceState(Bundle bundle) { 
    super.onSaveInstanceState(bundle); 
    bundle.putStringArrayList("History", History); 

和我的onCreate

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    if(savedInstanceState != null) { 
     History = savedInstanceState.getStringArrayList("History"); 
    } 

} 

出于某种原因,这个循环没有被initliased

if(savedInstanceState != null) { 
     History = savedInstanceState.getStringArrayList("History"); 
    } 

我敢肯定它的soemthing相当简单但我对Java仍然很陌生。

回答

0

如果您只是简单地切换活动,它将在后台保持活动状态(除非操作系统决定将其关闭以释放内存)。 Read this article for more information on Activity state

在这种情况下,当活动恢复时,将不会调用onCreate(),因为它已经被创建并且仅仅是onResume() -ed。

你应该看看在你的onPause()方法存储你的History值,如在SharedPreferences,数据库或应用类实例持久化对象(无论适合你的偏好)的另一种方法和onResume()恢复这些值。

onSavedInstanceState()用于当某个活动如方向更改或操作系统终止时被终止。

+0

噢好吧我看到,虽然我现在有一个新问题,但即使关闭并重新启动我的应用程序,SharedPreferences似乎也会保存我的值。任何想法如何重置每次新的运行变量? –

+0

SharedPreferences是跨应用程序的所有实例的持久存储,因此它[按设计工作](http://developer.android.com/training/basics/data-storage/shared-preferences.html)。当应用程序加载到主活动的onCreate()方法中时,您可以在'SharedPreferences'中清除记录。否则,您可以考虑以更易变的形式(例如应用程序类中的对象)存储数组。 – CodeMonkey

+0

啊是啊,很高兴它工作:) 对于有类似问题的任何人这里是一个很好的链接,有一个很好的全球类示例代码。 https://androidresearch.wordpress.com/2012/03/22/defining-global-variables-in-android/ –