8
votes

Comment détecter si l'activité parent de la vue est en train d'être détruite

Je veux faire du nettoyage dans une vue lorsque l'activité est détruite. Y a-t-il un moyen d'obtenir un rappel dans la vue lorsque l'activité est détruite? J'ai essayé d'utiliser OnDetachechedfromwindow , mais je ne suis pas sûr que ce soit correct à faire.


0 commentaires

3 Réponses :


1
votes

Avec la compréhension que OnDestroy n'est pas garantie, vous ne pouvez rappeler à votre vue dans la méthode Activités OnDestroy.

Modifier en réponse au commentaire: Vous pouvez obtenir n'importe quelle vue en lui donnant un identifiant dans la mise en page et en appelant FindviewyID. Voici un exemple:

layout.xml (indiquant le minimum nu) xxx

myactivity.java (à nouveau, minimal et supposant des importations appropriées) < / p> xxx


5 commentaires

Pouvez-vous élaborer un peu cela. Ma classe de visualisation personnalisée fait partie d'un package séparé et cette vue est définie dans la mise en page XML. Invoquant ainsi quelque chose à la vue de la classe d'activité n'est pas réalisable.


"Alors invoquant quelque chose à la vue de la classe d'activité n'est pas réalisable." Bien sûr que ça l'est. Appelez FOETVIEDBYID () , obtenez le widget, jettez-le à la classe appropriée et appelez une méthode dessus. Cela étant dit, OnDetachedfromwindow () semble être un choix raisonnable pour moi.


@Commonsware Vous commenciez plus vite que je ne peux éditer. :) BTW, merci pour tout le travail que vous faites. Vos livres / code / réponses ont été inestimables pour moi.


@Commonware: J'écris une bibliothèque qui a des vues personnalisées, au contraire à la rédaction d'une application Android. Je n'ai donc aucun contrôle sur le code de classe d'activité.


@BHUPS: Dans ce cas, stick avec OnDetachedfromwindow () , sauf s'il provoque des problèmes.



8
votes

Si vous souhaitez obtenir un rappel sans avoir à surcharger la vue View.ondetachedfromwindow () , vous pouvez utiliser le Voir.Ajouter () méthode, qui prend un auditeur de rappel comme un seul paramètre.


0 commentaires

0
votes

Etant donné que Affichage code> contient le contexte code>, j'utilise localBroadcastmanager code> pour cela. Jusqu'à présent, je n'ai pas rencontré de problèmes.

La vue code> écoute Détruire le filtre d'événement code>. L'activité code> a ensuite besoin de diffuser détruire l'événement code>. p> xxx pré>

n'oubliez pas d'enregistrer le filtre d'événement code> une fois que l'événement Destroy est déclenché. P>

presenter.destroy() // Your clean-up code here
LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver)


0 commentaires