#android #android-intent #bundle
#Android #android-намерение #пакет
Вопрос:
Итак, мне удалось решить проблему извлечения информации из пакета, но мне пришлось сделать кое-что, что показалось мне странным. Метод, который я попробовал первым, был следующим:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
list = savedInstanceState.getInt("listmenu");
}
И вот как я помещаю информацию в пакет и вызываю действие:
Intent myIntent = new Intent(MainActivity.this, NewActivity.class);
myIntent.putExtra("listmenu", R.menu.listmenu);
MainActivity.this.startActivity(myIntent);
Но это не сработало. Это просто приведет к сбою в строке 3, списке, в котором я пытаюсь getInt (я не мог точно выяснить, почему, но это не сработало).
Затем, после некоторого поиска в Google, я попробовал это так:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle extras = getIntent().getExtras();
list = extras.getInt("listmenu");
}
Мне кажется, что GetIntent().getExtras() просто вернет savedInstanceState . Но если бы это было так, то мой первый метод сработал бы. Поэтому я должен неправильно понимать, что такое savedInstanceState или что делает GetIntent() , так что может кто-нибудь объяснить, в чем разница между этими двумя вещами?
Ответ №1:
Пакет передается onCreate(), если действие уничтожается, а затем создается заново, т.Е. При изменении конфигурации. Если вы хотите сохранить данные при повторном создании вашей активности, вам следует переопределить onSaveInstanceState . Этот пакет будет передан как onCreate, так и onRestoreInstanceState.
Второй блок кода, который вы включили, подходит для чтения пакетов, переданных для новых запускаемых действий. Проясняет ли это ситуацию? Лучше всего прочитать описание каждого из них в документе Activity.
Комментарии:
1. Да, я думаю, это проясняет ситуацию. Итак, я получу savedInstanceState только в том случае, если действие уже существует и каким-то образом возобновляется? В противном случае мне нужно использовать GetIntent().getExtras()?
2. Не возобновляется, если он уничтожается и создается заново. Если вы хотите доказать это себе, я предлагаю переопределить все эти методы и ввести вызов журнала, такой как Log.d(«жизненный цикл», «onCreate()»), Log.d(«жизненный цикл», «onPause ()») и т.д…
3. Из javadoc в savedInstanceState:
If the activity is being re-initialized after previously being shut down then this Bundle contains the data it most recently supplied in onSaveInstanceState(Bundle). Note: Otherwise it is null.