11
votes

Comment détecter s'il est revenu de l'activité de l'enfant?

Comment puis-je détecter si une activité est venue se concentrer après avoir appuyé sur le bouton arrière d'une activité enfant et comment puis-je exécuter du code à ce moment-là?


2 commentaires

Placez votre logique dans l'ONRESUME () de votre activité mère. Donc, une fois que vous êtes revenu de votre enfant, il sera exécuté.


@Padmakumar qui est incorrect. OnResume () est appelé à tout moment l'activité des parents devient initié, que ce soit la première fois, soit revenue d'un enfant, revient d'une boîte de dialogue modale ou est lancé la 5ème fois à partir d'un tiroir de navigation. .


4 Réponses :


14
votes

Une possibilité serait de démarrer votre activité enfant avec startactivityforresult () et mettre en œuvre OnActivityResult () qui sera appelé lorsque vous revenez de l'activité de l'enfant.


0 commentaires

2
votes

La méthode que vous recherchez peut être la méthode onResume que vous pouvez mettre en œuvre dans votre classe mère;). Vous devez savoir que l'ONRESUME est également appelé la première fois que vous lancez une activité. Regardez le cycle de vie d'une activité: http://developer.android.com/images/activity_lifecycle.png

Cordialement,


4 commentaires

Alors, que se passera-t-il si sur Onresume, j'ai une mise à jour de la fonction? Activité Premier changement / configuration Modifier, la mise à jour sera également appelée même si elle n'est pas destinée.


Comment cette réponse aide-t-elle? OnResume () est appelé à la fois lorsque l'activité mère se lance d'abord et lorsque vous y retournerons en appuyant sur le bouton arrière d'une activité d'enfant. Alors, comment es-tu censé détecter la différence?


@Larsh Simple. Avoir une variable booléenne locale isfirst initié avec une valeur false. Sur Onresume () , vérifiez d'abord si le Isfirst est faux. Cela signifie que c'est la première fois que le onresume () est appelé. Continuez avec le réglage du Isfirst avec true. Uvant OnResume () L'appel aura le ISFirst true.


@Chenliyong: Je pense que vous voulez dire la variable d'être isnotfirst . Mais quelle est sa portée et sa vie? Est-ce statique? Où / quand est-il initialisé? Comment vous assurez-vous que ce n'est pas initialisé plusieurs fois? Et si l'utilisateur vient à la même activité deux fois sans frapper le bouton arrière (il existe de nombreuses façons potentielles de naviguer dans une application)? Comme vous pouvez le constater, cette méthode présente de nombreuses façons de produire de faux positifs et des négatifs.



7
votes

La réponse de JS a raison, mais voici un code de débogage.

Déclarez le code de demande comme une constante en haut de votre activité: p>

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == OPEN_NEW_ACTIVITY) {
        // Execute your code on back here
        // ....
    }
}


1 commentaires

Cela devrait être la réponse acceptée ... mais une correction mineure dans votre code nécessaire. La plage de valeurs DemandeCode est de 0 à 65535. Ainsi, open_new_activity = 123456 ne fonctionnera pas. Alors, j'ai mis à jour votre réponse!



0
votes

Vous pouvez également remplacer à la fois la méthode OnBackPressed () et la méthode OnOptionsItemselected () et mettre une certaine logique là-bas. Par exemple, je l'ai mis dans ma fabrique que toutes les autres activités s'étend de: xxx


0 commentaires