Я использую рекомендуемый подход для Up Navigation, и мой код выглядит следующим образом:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent h = new Intent(ShowDetailsActivity.this, MainActivity.class);
h.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(h);
return true;
default: return super.onOptionsItemSelected(item);
}
}
Здесь прецедент:
- Я запускаю свое приложение, которое является "MainActivity"
- Я нажимаю кнопку, чтобы перейти к "ShowDetailsActivity"
- Я нажимаю на навигацию UP ActionBar
Проблема заключается в том, что после того, как я нажимаю UP, MainActivity снова и снова запускает методы onCreate() и теряет все состояние, а не начинает с типичного onResume(), как если бы я только что вызвал "finish()" из ShowDetailsActivity. Зачем? Как это всегда работает, и это ожидаемое поведение Android для воссоздания всех видов деятельности, которые ориентированы на использование навигационного подхода "Вверх"? Если я нажму кнопку "Назад", я получу ожидаемый жизненный цикл onResume.
Это мое решение, если Android "правильных" не существует:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent upIntent = new Intent(this, MainActivity.class);
if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
NavUtils.navigateUpTo(this, upIntent);
finish();
} else {
finish();
}
return true;
default: return super.onOptionsItemSelected(item);
}
}