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?
2 réponses
Utiliser
Intent intent = new Intent(SyncActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
à 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.