-2

我创建了两个活动 A 和 B。在活动 A 中,使用 onSaveInstanceState 方法我正在保存包值 ex(outState.putString("selectSaveDate", this.CalSelectedDate)) 并转到活动 B。当我点击返回按钮时Activity A ,在 oncreate 方法中,bundle 值为 null。我无法在 oncreate 方法中获取我保存的值。

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.clear();
    Log.i("bundleSave", "tester1" + this.CalSelectedDate);
    outState.putString("selectSaveDate", this.CalSelectedDate);
   }
    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
            if(savedInstanceState != null){
            Log.i("todolist", "dsa" + savedInstanceState.getString("selectSaveDate"));
        }
    }
4

2 回答 2

0

请尝试覆盖 onSaveInstanceState(Bundle savedInstanceState) 并将您要更改的应用程序状态值写入 Bundle 参数,如下所示:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
  super.onSaveInstanceState(savedInstanceState);
  // Save UI state changes to the savedInstanceState.
  // This bundle will be passed to onCreate if the process is
  // killed and restarted.
  savedInstanceState.putDouble("myDouble", 1.9);
  savedInstanceState.putInt("MyInt", 1);
  savedInstanceState.putString("MyString", "How are you");
  // etc.
}

它将被传递给 onCreate 和 onRestoreInstanceState ,您将在其中提取如下值:

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  // Restore UI state from the savedInstanceState.
  // This bundle has also been passed to onCreate.
  double myDouble = savedInstanceState.getDouble("myDouble");
  int myInt = savedInstanceState.getInt("MyInt");
  String myString = savedInstanceState.getString("MyString");
} 


 or follow activity life cycle for better understanding.
于 2014-07-02T09:31:12.493 回答
0

您仅将数据存储在 OnSaveInstanceState 方法中的捆绑包中,以便在您的活动被销毁和重新创建时(例如在旋转屏幕时或当 android 操作系统可能决定在资源不足时终止您的活动时)保存数据。当您在当前执行的活动 A 之上启动活动 B 时,A 将进入停止状态(因此,您的 A 活动不会被破坏)。此外,当您从 onStop 回来时,调用的下一个方法是 onStart()(技术上 onRestart() 在 onStart() 之前调用,但我发现很少实现回调。

总之,如果您尝试在当前执行的活动之上启动活动之间保留持久数据,则可以将该数据存储在该活动的实例变量中。如果您尝试在应用程序启动之间持久化数据,那么您将需要考虑将数据存储在 Android 的内置 sqllite 数据库或 Android 的 SharedPreferences 中。

您还应该对 Activity 生命周期有一个真正的了解(它很棘手,但需要在 android 中成功编码):

http://developer.android.com/training/basics/activity-lifecycle/index.html

于 2014-07-02T09:26:57.990 回答