繁体   English   中英

Android onsaveinstancestate()

[英]Android onsaveinstancestate()

所以我得到了如何使用的主要思想

  protected void onSaveInstanceState (Bundle outState)

http://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState(android.os.Bundle)

也来自使用“保存实例状态”保存Android活动状态

但是我的问题是,如果这是第一次创建应用程序,该怎么办? 那么以前什么也不会存储在捆绑软件中....如果是的话,那么当我尝试从捆绑软件中调出尚未保存的东西之前,我得到什么呢? 例如我的代码中有这个

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    String [] b=savedInstanceState.getStringArray("MyArray");
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    String [] a={"haha"};
    savedInstanceState.putStringArray("MyArray", a);
}

第一次打开应用程序时,b的值是什么? 在应用程序使用一次之后,b的值是多少?

非常感谢!

在您的onCreate()中添加一个条件

 if(savedInstanceState==null){
  //meaning no data has been saved yet or this is your first time to run the activity.  Most likely you initialize data here.
 }else{
   String [] b=savedInstanceState.getStringArray("MyArray");
 }

通过检索保存在onSaveInstanceState中的数据的方式,您将覆盖它

 @Override
 protected void onRestoreInstanceState(Bundle savedInstanceState) {
   // TODO Auto-generated method stub
  super.onRestoreInstanceState(savedInstanceState);
}

您必须始终在onCreate()onRestoreInstanceStateState()中始终检查null,如下所示:

String [] b = new String[arraysize];    

   protected void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);      

                  if (savedInstanceState != null)
                  {
                       b = savedInstanceState.getStringArray("MyArray");

                      // Do here for resetting your values which means state before the changes occured.

                  }
                  else{
                          default.. 
                  }

                   Here you do general things.
    }

暂无
暂无

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

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