Как возобновить активность экрана для нескольких действий?

Итак, у меня есть эти два экрана: экран сообщений и экран игры. Я хочу, чтобы когда пользователь переключается обратно с любого экрана, он возобновляет предыдущее действие.

Это фрагмент кода на моем игровом экране, который позволяет пользователю перейти на экран сообщений:

public void onMessagesButtonClick() {
    Intent intent = new Intent(this, Messages.class);
    startActivity(intent);
    overridePendingTransition(0, 0);
}

И это небольшой фрагмент кода, который позволяет пользователю вернуться с экрана сообщений на экран игры.

public void onGameButtonClick() {
    Intent intent = new Intent(getApplicationContext(), Game.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    startActivity(intent);
    finish();
    overridePendingTransition(0, 0);
}

Пока я могу перейти с экрана игры на экран сообщений, затем перейти с экрана сообщений и возобновить работу на экране игры.

Проблема в том, что я не могу возобновить активность с экрана сообщений, только с экрана игры. Если бы я обновил onMessagesButtonClick() до:

public void onMessagesButtonClick() {
    Intent intent = new Intent(getApplicationContext(), Messages.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    startActivity(intent);
    finish();
    overridePendingTransition(0, 0);
}

Я больше не смогу возобновить активность с экрана игры. Это будет так, как если бы я впервые зашел на экран, запустив его заново.

Что я могу сделать, чтобы иметь возможность возобновить предыдущую активность на обоих экранах при переходе между экранами?

Используйте onSaveInstanceState, чтобы сохранить состояние действия и вернуть состояние в пакете savedInstanceState в onCreate (). Это не так уж и сложно.

Christine 25.12.2018 01:09

@Bert Hanz: Я думаю, вы должны понимать с использованием флага намерения для начала деятельности

John Le 25.12.2018 05:10

Переопределите onBackPressed(), чтобы перейти к правильному экрану.

Richard Le Mesurier 28.12.2018 08:53
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
107
1

Ответы 1

Попробуй это

public void onGameButtonClick() {
    Intent intent = new Intent();
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    setResult(RESULT_OK, intent);
    finish();
    overridePendingTransition(0, 0);
}

на вашем игровом классе

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1) {
            if (resultCode == RESULT_OK) {
             //If you are going to fetch data from former activity
            }
    }
}

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