Извлечение данных из пакетов в Android

#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.