Terminer l'activité Android et en commencer une autre

je suis curieux d'une chose. Comment puis-je terminer mon activité actuelle et en commencer une autre?

exemple:

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

donc je veux quand SyncActivity commence MainActivity après sync pleine succesfull et si j'appuie sur le bouton arrière pour ne pas revenir à SyncActivity ou toute autre activité ouverte avant SynActivity .

j'ai essayé avec ce code:

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

mais ça ne marche pas correctement. Tout idées comment faire fonctionner les choses correctement?

23
demandé sur Sagar 2011-09-29 19:47:42

2 réponses

Utiliser

Intent intent = new Intent(SyncActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
48
répondu Zoleas 2011-09-29 16:33:57

à en juger par votre OP, je ne suis pas sûr que vous devez absolument initialiser votre activité principale deux fois..

Android est conçu de sorte qu'une application n'est jamais vraiment fermé par l'utilisateur. Concentrez-vous sur la suppression des méthodes de cycle de vie android telles que OnResume et OnPause pour sauver les données UI, etc.

par conséquent, vous ne devez pas explicitement finish() l'activité principale (et ne devrait vraiment pas). Pour recevoir les données de connexion ou de synchronisation des activités précédentes, il suffit de remplacer la méthode OnActivityResult() . Toutefois, pour ce faire, vous devez commencer l'activité en utilisant startActivityForResult(intent) . Donc, pour chaque activité, vous devez faire ceci:

activité principale:

static public int LOGIN_RETURN_CODE = 1;

pour commencer l'ouverture de session:

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

pour recevoir les informations de login:

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

activité de connexion:

static public int SYNC_RETURN_CODE = 2;

pour démarrer la synchronisation:

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

pour recevoir des informations et retour à la page principale:

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

cela pourrait ne pas tout compiler, mais espérons que vous obtenez l'idée.

3
répondu Ian 2011-09-29 18:51:33