Android завершает действие и запускает другое

Мне любопытно кое-что. Как я могу закончить свою текущую деятельность и начать другую.

Пример:

MainActivity
    --(starts)--> LoginActivity
        --(if success, starts)--> SyncActivity
            --(if success start)--> MainActivity (with updated data).

Итак, я хочу, чтобы, когда SyncActivity запускал MainActivity после успешной синхронизации, и если я нажму кнопку возврата, не возвращаться к SyncActivity или любому другому активность открыта до SynActivity .

Я пробовал использовать этот код:

Intent intent = new Intent(Synchronization.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
this.finish();

, но он не работает должным образом. Есть идеи, как заставить все работать должным образом?

24
задан Sagar 27 February 2018 в 20:36
поделиться

1 ответ

Судя по вашему OP, я не уверен, что вам обязательно нужно дважды инициализировать mainActivity.

Android разработан таким образом, что приложение никогда не закрывается пользователем. Сконцентрируйтесь на переопределении методов жизненного цикла Android, таких как OnResume и OnPause, чтобы сохранить данные пользовательского интерфейса и т. Д.

Следовательно, вам не нужно явно finish() выполнять основное действие (и на самом деле не должно). Чтобы получить данные для входа или синхронизации от предыдущих действий, просто переопределите метод OnActivityResult(). Однако, чтобы сделать это, вы должны начать упражнение, используя startActivityForResult(intent). Таким образом, для каждого действия вы должны сделать следующее:

Основное действие:

static public int LOGIN_RETURN_CODE = 1;

для начала входа в систему:

Intent intent = new Intent(MainActivity.this, LogInActivity.class);
startActivityForResult(intent, LOGIN_RETURN_CODE);

для получения информации для входа в систему:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
      case LOGIN_RETURN_CODE:
        //do something with bundle attached
    }
}

Активность при входе:

static public int SYNC_RETURN_CODE = 2;

для запуска синхронизации:

Intent intent = new Intent(LogInActivity.this, SyncActivity.class);
startActivityForResult(intent,SYNC_RETURN_CODE);

для получения информации и возврата в главное состояние:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
          case MainActivity.SYNC_RETURN_CODE:
            Intent intent = new Intent(...);
            intent.setResult(RESULT_OK);
            finish();
        }
    }

Это может быть не все скомпилируйте, но, надеюсь, вы поняли идею.

3
ответ дан 28 November 2019 в 22:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: