Кнопка Android Action Вверх и кнопка Назад

Я использую Actionbar, и это кнопка «вверх», чтобы вернуться от элементарной активности к основной активности, которая работает нормально. Аналогично, пользователь может нажать кнопку «назад» системы, чтобы вернуться к основному действию.

В моем основном onCreate() , в onCreate() данные загружаются из Интернета, чтобы отображать при запуске приложения. Я заметил, что когда я использую кнопку «вверх» Actionbar, чтобы перейти от детали к основной деятельности, onCreate() , повторно загружая данные. Но onCreate() не запускается, когда я использую кнопку «Назад» системы, поэтому сразу отображается основной вид активности.

Код, который я использую в подробном действии для реализации кнопки «вверх»:

 switch (item.getItemId()) { case android.R.id.home: Intent intent = new Intent(this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); return true; 

Я бы хотел, чтобы кнопка «вверх» onCreate() себя как кнопка «назад», а не повторяла onCreate() . Но я не уверен, как это сделать, или какой путь кода используется для возврата к основному действию.

Благодаря!

Вместо того, чтобы начать совершенно новую деятельность, просто закончите работу с деталями, в которых вы находитесь

 switch (item.getItemId()) { case android.R.id.home: finish(); return true; 

Затем вы вернетесь к предыдущему действию в стеке активности (ваше основное действие), а onCreate не следует называть

Я думаю, что лучшее решение можно найти в этом посте .

Вызов finish() работает в определенных ситуациях, но не всегда может привести к поведению, описанному в документации, например:

Введите описание изображения здесь

Позвонив

 Intent intent = NavUtils.getParentActivityIntent(this); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); NavUtils.navigateUpTo(this, intent); 

Вы вернетесь к родительской активности в состоянии, в котором вы ее оставили. Если у вас есть плоская структура приложения, она будет действовать так же, как кнопка «Назад».

Если вы хотите, чтобы Up сделал именно то, что делает Back, вы можете сделать это:

 @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case android.R.id.home: onBackPressed(); return true; default: break; } return super.onOptionsItemSelected(item); } 

Обратите внимание: стандартная реализация onBackPressed() просто вызывает finish() , но onBackPressed может быть переопределен.

Я считаю, что самый простой способ – переопределить метод getParentActivityIntent для детальной деятельности, добавив флаг «Intent.FLAG_ACTIVITY_CLEAR_TOP»:

 @Nullable @Override public Intent getParentActivityIntent() { Intent intent = super.getParentActivityIntent(); if (intent != null) { return super.getParentActivityIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); } return intent; } 

Для реальной «домашней» функциональности вы должны увидеть демо api в разделе «Действия приложения / активности / порядка».

Причина: что, если у вас есть что-то вроде этого: activity1-> activity2-> activity3, и теперь вы хотите перейти к активности1, нажав кнопку «Домой» на панели действий?

Есть еще одно решение, которое может быть доступно кому-то. У меня было такое же двойное поведение, когда пользователь нажал кнопки Back и ActionbarBack. Я был в порядке с поведением Back btn. Я не хотел, чтобы деятельность была воссоздана. Поэтому я перепробовал метод

  @Override public boolean onSupportNavigateUp() { onBackPressed(); return true; } 

Прекрасно работает для меня