Любая помощь будет оценена по достоинству, потому что я почти закончен, и эта мелочь меня так сильно раздражает!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);
}
Спасибо, что ответили! поэтому, когда я вызываю 'onPause()' или 'onResume' (или оба!), что было бы лучшим способом сохранить значения, чтобы я мог иметь' onCreate' с этим контейнером, что он сделал с 'onSavedInstanceState()'? SharedPreferences? просто обычный список или массив строк? – KellysOnTop23
'onPause' и' onResume' вызываются автоматически для вас. Если вы посмотрите на свой код, вам не нужно ничего делать, чтобы ваши текстовые поля переполнялись в режиме активного отдыха. Вы также можете удалить свой метод 'onRestoreInstanceState' - вы уже обрабатываете все в' onCreate'! –
Обратите внимание, что я предполагаю это, вы имеете в виду, когда вы покидаете действие, а затем повторно вводите его нажатием кнопки «Назад»: «когда вы переходите к другому действию из actionBar, тогда TextView будет по-прежнему тем же» –