Официальный код 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() определенно будет

Другие вопросы по тегам