J'ai 4 activités dites Act1
, Act2
, Act3
et Act4
. Un bouton dans Act1 ouvre Act2, un bouton dans Act2 ouvre Act3, un bouton dans Act3 ouvre Act4.
Je veux deux choses à faire:
J'ai un bouton dans Act4 qui dirige l'utilisateur vers Act1, le problème est que lorsque l'utilisateur clique de nouveau dans Act1, je veux fermer l'application au lieu d'ouvrir Act4.
J'ai l'option dans le menu 'quitter' dans toutes les activités lorsque l'utilisateur le choisit, je veux fermer l'application au lieu de revenir à l'activité précédente.
Essayé d'utiliser finish();
mais il ne répondait pas à mes exigences.
Utilisez le code ci-dessous dans votre Act4
'e Menu.xml
' s bouton de sortie -
Intent intent = new Intent(Act4.this, Act1.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
Et, dans la méthode onCreate()
de votre première activité, mettez simplement le code ci-dessous -
if (getIntent().getBooleanExtra("EXIT", false))
{
finish();
}
Cela va quitter votre application.
Découvrez ce lien:
Vous pouvez utiliser :
@Override
public void onBackPressed()
{
moveTaskToBack(true);
}
dans toutes les activités pour fermer l'application.
terminer l'activité précédente lorsque vous passez à l'activité suivante signifie que vous écrivez finish();
après startactivity(intent);
et écrivez ci-dessous le code correspondant à la première activité de l'événement de clic sur le bouton de la quatrième activité.
Intent in1=new Intent(Act4.this, Act1.class);
startActivity(in1);
finish();
Et écrivez en dessous du code sur l'événement Click de votre bouton de sortie dans toutes les activités.
finish();
Intent intent = new Intent(Act4.this, Act1.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Supprimez l'indicateur avant de revenir à l'activité précédente. Cela pourrait vous aider.
Placez ce code dans votre application:
moveTaskToBack(true);
Android.os.Process.killProcess(Process.myPid());
System.exit(1);
Utilisez Android:noHistory = "true"
dans votre fichier AndroidManifest.xml
<activity
Android:name=".Act1"
Android:noHistory="true" />
<activity
Android:name=".Act2"
Android:noHistory="true" />
<activity
Android:name=".Act3"
Android:noHistory="true" />
<activity
Android:name=".Act4"
Android:noHistory="true" />
J'utilise cette méthode:
1. Créez une activité statique dans la première activité qui fermera le fichier activité (s) restante (s).
2. Puis appelez-le dans la méthode statique comme ceci, il fermera l'application où que vous l'appeliez.
public static Activity activity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activity=this;
}
public static void CloseApp(){
activity.finish();
}
Do a
<code>
try
{
finalize();
finish
}
catch(Exception error)
{
error.printStackTrace();
}
//This would exit your App neatly
</code>
L’approche que j’utilise consiste à démarrer toutes les activités enfants avec startActivityForResult
. Ensuite, je peux mettreExtra ("STATE", some_value) à la sortie d’un enfant et utiliser la valeur de l’état pour déterminer ce qu’il faut faire par l’intermédiaire des parents.
Si je veux quitter l'application d'un enfant profond, "STATE" serait "exit" et chaque enfant de la hiérarchie obtiendrait simplement le StringExtra pour "exit", effectuera un putExtra ("STATE", "exit") et appellera finish () et l'application appellerait finish () à la fin. Vous pouvez l'utiliser pour atteindre n'importe quel état souhaité.
L'utilisation de startActivityForResult pour transmettre des messages de cette manière vous évite d'avoir à passer des références compliquées dans les activités enfants et simplifie votre approche pour définir l'état souhaité de l'application.
Si vous avez une autre activité derrière (dans la pile d'activité de l'application), vous pouvez utiliser finish()
pour quitter l'activité en cours.
Cependant, la fonction de retour suppose également de supprimer l'activité en cours de la pile d'activités de votre application.
D'après mon expérience, il n'est pas très fiable de s'appuyer sur les activités de la pile arrière (dans la pile d'activité des applications). À cause de ça, je sortais de chaque activité quand j'approfondissais.
Dans ton cas:
Act 1 -> exit -> Act 2 -> exit -> Act 3 -> exit -> Act 4 -> exit -> Act 1 -> exit
La méthode ci-dessus quittera toutes les activités.
Toutefois, si vous souhaitez exécuter du code en arrière-plan, il est préférable de s'appuyer sur un "service" plutôt que sur une "activité". Vous pouvez laisser le "Service" sortir après avoir effectué le travail qui lui est assigné.