Android завершить активность и начать еще один - PullRequest
23 голосов
/ 29 сентября 2011

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

Пример:

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

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

Ответы [ 2 ]

51 голосов
/ 29 сентября 2011

Использование

Intent intent = new Intent(SyncActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
3 голосов
/ 29 сентября 2011

Судя по вашему 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();
        }
    }

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

...