Официальный код Google для кнопки вверх действует странно
Я ввел кнопку "вверх" в соответствии с рекомендациями Google, найденными здесь: http://developer.android.com/training/implementing-navigation/ancestral.html
Как это:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// This is called when the Home (Up) button is pressed
// in the Action Bar.
case android.R.id.home:
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(
Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Большая проблема с этим кодом заключается в том, что MainActivity запускается из нового экземпляра. Я хотел бы открыть предыдущий экземпляр MainActivity, не перезапуская его.
Поскольку эта активность довольно тяжелая, я не хочу создавать новую каждый раз, когда пользователь нажимает кнопку "вверх".
Я пытался убрать флаг FLAG_ACTIVITY_NEW_TASK и много играл со всеми мыслимыми флагами, но мне не удалось создать кнопку, которая вернула бы MainACctivity в предыдущем состоянии.
Любая помощь будет высоко оценен.
1 ответ
То, что вы ищете, это флаг:
Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
Что будет делать то, что вы хотите - если действие уже существует в задаче и стеке, то оно будет перенесено на передний план, в противном случае оно будет воссоздано.
Имейте в виду, что если Activity была уничтожена GC, то она все равно будет воссоздана, и некоторые компоненты пользовательского интерфейса могут быть сброшены в зависимости от того, где у вас есть код инициализации (я не думаю, что onCreate()
называется, но onResume()
определенно будет