2010-10-28 33 views
5

Si l'utilisateur appuie plusieurs fois sur le bouton Précédent, il me faut un moyen de détecter quand il se trouve sur la dernière activité de ma tâche/application et d'afficher "Voulez-vous quitter? " dialogue avant qu'ils ne retournent à l'écran d'accueil ou à l'application précédente qu'ils avaient en cours d'exécution.Afficher le dialogue Oui/Non avant de quitter l'application via le bouton Précédent

C'est assez facile de crocheter onkeypressed(), mais comment puis-je comprendre que c'est une "dernière" activité dans la tâche?

+3

Êtes-vous sûr de vouloir faire cela? Cela semble plutôt ennuyeux. L'utilisateur apprend rapidement ce que signifie le dos, et comprend qu'ils pourraient quitter l'application .. –

+3

Qu'est-ce qui est avec le vote vers le bas? Il est clairement indiqué de rejeter les questions «peu claires ou pas utiles», ce n'est ni l'un ni l'autre. Ce n'est peut-être pas la façon recommandée de faire les choses, mais je ne crois pas que cette question devrait être rejetée pour cela. Voter le sauvegarder. – ShadowGod

Répondre

6

Je pense que vous pouvez utiliser smth comme dans votre activité pour vérifier si elle est le dernier :

private boolean isLastActivity() { 
    final ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
    final List<RunningTaskInfo> tasksInfo = am.getRunningTasks(1024); 

    final String ourAppPackageName = getPackageName(); 
    RunningTaskInfo taskInfo; 
    final int size = tasksInfo.size(); 
    for (int i = 0; i < size; i++) { 
     taskInfo = tasksInfo.get(i); 
     if (ourAppPackageName.equals(taskInfo.baseActivity.getPackageName())) { 
      return taskInfo.numActivities == 1; 
     } 
    } 

    return false; 
} 

Il faudra aussi ajouter une autorisation à votre AndroidManifest.xml:

<uses-permission android:name="android.permission.GET_TASKS" /> 

Ainsi dans votre activty vous pouvez simplement utiliser les éléments suivants:

public void onBackPressed() { 
    if (isLastActivity()) { 
     showDialog(DIALOG_EXIT_CONFIRMATION_ID); 
    } else { 
     super.onBackPressed(); // this will actually finish the Activity 
    } 
} 

Puis, en youd Dialog gérer le bouton clic pour appelez Activity.finish().

+0

brillant! Je vous remercie. – Saideira

2

S'il vous plaît examiner la Android Application Fundamentals, cela viole le comportement promu d'une application Android:

Lorsque l'utilisateur appuie sur la touche BACK, l'écran ne montre pas l'activité de l'utilisateur vient de quitter (l'activité de base de la tâche précédente). Au lieu de cela, l'activité en haut de la pile est supprimée et l'activité précédente dans la même tâche est affichée.
+0

Je souhaite que nous vivions dans un monde parfait, mais hélas. Le client veut le dialogue. Alors, y a-t-il un moyen de jeter un coup d'œil à la pile d'activités/tâches globale? – Saideira

+0

Oui, je suis d'accord que les clients veulent des choses qu'ils avaient l'habitude de faire. Avec certains types de clients, nous ne pouvons simplement pas dire «Non» et simplement faire ce qu'ils veulent. Vérifiez ma réponse pour savoir comment faire ce dont vous avez besoin. –