Подтвердить что ты не робот

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

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

Пример:

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

Поэтому, когда SyncActivity запускает SyncActivity после succesfull sync, и если я нажимаю кнопку "Назад", чтобы не возвращаться к SyncActivity или к любой другой активности, открытой до SynActivity.

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

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

но он работает неправильно. Любые идеи о том, как заставить вещи работать правильно?

4b9b3361

Ответ 1

Используйте

Intent intent = new Intent(SyncActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

Ответ 2

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

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);

чтобы получить информацию и вернуться к Main:

@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();
        }
    }

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