2014-07-02 5 views
-1

Я создал два действия A и B. В действии A, используя метод onSaveInstanceState, я сохраняю значение пакета ex (outState.putString ("selectSaveDate", this.CalSelectedDate)) и переходит в Activity B Когда я нажимаю кнопку «Назад» на «Активность А», в методе oncreate значение пакета равно null. Я не могу получить свою сохраненную ценность в методе oncreate.Android Save Instance State

@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")); 
     } 
    } 
+0

Почему вы не пользуетесь общим преимуществом? – SRam

+0

В настоящее время я использую календарь. Мне нужно сохранить месяц, и мне нужно найти метод oncreate. –

+0

также пожалуйста, не забудьте оставить полезный ответ, это было бы для вас тоже полезно. – SRam

ответ

0

Вы только хранить данные в связке в OnSaveInstanceState метод для сохранения данных, когда ваша деятельность будет уничтожен и создан заново (например, при повороте экрана или когда ОС Android может решить убить свою деятельность, если она на ресурсах мало). Когда вы запускаете действие B поверх вашего текущего действия A, A переходит в состояние остановки (поэтому ваша активность A не уничтожается). Кроме того, когда вы возвращаетесь с onStop, следующий метод, который называется onStart() (технически onRestart() называется be before onStart(), но я считаю, что обратный вызов редко выполняется.

В заключение, если ваш пытаясь сохранить данные в промежутке между запуском активности поверх текущей выполняемой вами деятельности, вы можете просто сохранить эти данные в переменных экземпляра для этого действия. Если вы пытаетесь сохранить данные между запусками приложений, тогда вы захотите изучить данные хранения в Android встроенный в sqllite базе данных или SharedPreferences Android,

Вы должны также получить очень хорошее представление о жизненном цикле активности (его сложно, но необходимо, чтобы код успешно в Android):.

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

0

пожалуйста, попробуйте Override 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.