0

Любая помощь будет оценена по достоинству, потому что я почти закончен, и эта мелочь меня так сильно раздражает!Activity's savedInstanceState() не вызывается при переходе к новой активности через ActionBar

У меня есть один из трех видов деятельности, который в onCreate() заполняет TextView из запроса базы данных. Эта деятельность также является основным видом деятельности. Остальные 2 действия, которые вы проходите через панель действий, как показано ниже, показывают. У меня есть как savedInstanceState(), так и onRestoreInstanceState() в игре здесь, и они работают только при полном выходе из приложения, что хорошо, но я также хочу, чтобы при переходе на другую активность из actionBar тогда TextView не придется повторно -Загрузить базу данных. Я хочу, чтобы textview был таким же, как когда вы уходите, потому что каждый раз, когда вы выходите с помощью Actionbar, textView запускает совершенно новый запрос, и я не хочу этого. Я хочу, чтобы он все еще имел результат первого запроса, когда пользователь впервые прибыл.

Я попытался с помощью finish() и onStop() методы, чтобы помочь прекратить деятельность так, что saveOnInstanceState() будет вызываться, когда активность разрушена, но она либо не работает, или я не помещая его в нужном месте. Любые мысли Пожалуйста?!?!?!

применения savedInstanceState в OnCreate():

if(savedInstanceState != null){ 
     String SavedStory = savedInstanceState.getString(SavedStoryHere); 
     String SavedTitle = savedInstanceState.getString(SavedTitleHere); 
     OpenningTextView.setText(SavedStory); 
     TitleTextView.setText(SavedTitle); 
    } 
    else{ 
     OpenningTextView.setText(StoryText); 
     TitleTextView.setText(TitleString); 
    } 

onSavedInstanceState() и onRestoreInstanceState():

protected void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    String text = OpenningTextView.getText().toString(); 
    String titleText = TitleTextView.getText().toString(); 
    savedInstanceState.putString(SavedStoryHere, text); 
    savedInstanceState.putString(SavedTitleHere, titleText); 
} 

protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    OpenningTextView.setText(savedInstanceState.getString(SavedStoryHere)); 
    TitleTextView.setText(savedInstanceState.getString(SavedTitleHere));   
} 

Переход к различным видам деятельности через ActionBar:

public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()){ 
     case R.id.Openning_Screen: 
      Toast.makeText(this, "This is the Story of the Day", Toast.LENGTH_SHORT) 
      .show(); 
      return true; 
     case R.id.The_List: 
      Intent A_ListIntent = new Intent(this, A_Where_List.class); 
      startActivity(A_ListIntent); 
      return true; 
     case R.id.Settings: 
      Intent SavedStoriesIntent = new Intent(this, Settings.class); 
      startActivity(SavedStoriesIntent); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 

ответ

2

То, что вы видите, - это ожидаемое поведение.

Вызов startActivity(intent) не завершает/не разрушает текущую деятельность - поэтому вы не получаете onSaveInstanceState. Когда пользователь нажимает кнопку «Назад», ваше действие будет находиться в состоянии, в котором оно было, когда они покинули страницу.

Что вы должны видеть, это /onResume призвал уйти &, повторно входя в вашу основную деятельность.

+0

Спасибо, что ответили! поэтому, когда я вызываю 'onPause()' или 'onResume' (или оба!), что было бы лучшим способом сохранить значения, чтобы я мог иметь' onCreate' с этим контейнером, что он сделал с 'onSavedInstanceState()'? SharedPreferences? просто обычный список или массив строк? – KellysOnTop23

+0

'onPause' и' onResume' вызываются автоматически для вас. Если вы посмотрите на свой код, вам не нужно ничего делать, чтобы ваши текстовые поля переполнялись в режиме активного отдыха. Вы также можете удалить свой метод 'onRestoreInstanceState' - вы уже обрабатываете все в' onCreate'! –

+0

Обратите внимание, что я предполагаю это, вы имеете в виду, когда вы покидаете действие, а затем повторно вводите его нажатием кнопки «Назад»: «когда вы переходите к другому действию из actionBar, тогда TextView будет по-прежнему тем же» –

2

Я думаю, что ваша проблема - ваш Launch Mode, определенный для ваших действий. По умолчанию он позволяет несколько экземпляров, и в этом случае я думаю, что вам нужен один экземпляр. Поэтому, когда вы возвращаетесь к первоначальной активности, это новый экземпляр, и onRestoreInstanceState() не будет вызываться.

Попробуйте установить launchMode в singleInstance для вашей активности в манифесте.

android:launchMode="singleInstance" 
+0

@ KellysOnTop23 если он исправил это для вас, вы могли бы принять мой ответ. Благодаря! – alenz316