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à? P>
4 Réponses :
Une possibilité serait de démarrer votre activité enfant avec startactivityforresult () code>
et mettre en œuvre OnActivityResult () code>
qui sera appelé lorsque vous revenez de l'activité de l'enfant. P >
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 p>
Cordialement, P>
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 () Code> 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 code> initié avec une valeur false. Sur
Onresume () Code>, vérifiez d'abord si le
Isfirst code> est faux. Cela signifie que c'est la première fois que le
onresume () code> est appelé. Continuez avec le réglage du
Isfirst code> avec true. Uvant
OnResume () Code> L'appel aura le
ISFirst code> true.
@Chenliyong: Je pense que vous voulez dire la variable d'être isnotfirst code>. 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 i> 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.
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 // .... } }
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!
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:
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 () Code> 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. .