Je souhaite effectuer un nettoyage dans une vue lorsque l'activité est en cours de destruction. Est-il possible d'obtenir un rappel dans la vue lorsque l'activité est détruite? J'ai essayé d'utiliser onDetachedFromWindow
, mais je ne suis pas sûr que ce soit la bonne chose à faire.Comment détecter si l'activité parent de la vue est en cours de destruction
Répondre
Sachant que onDestroy n'est pas garanti d'être appelé, vous pouvez simplement rappeler votre vue dans la méthode des activités onDestroy.
Editer 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 findViewById. Voici un exemple:
layout.xml (ne montrant que le strict minimum)
<LinearLayout>
<com.example.superwidget.DropDownTouchEnabledListView
android:id="@+id/special_list_view" />
</LinearLayout>
MyActivity.java (encore une fois, les importations nues propres minimales et à supposer que)
@Override
void onDestroy() {
DownTouchEnabledListView v = (DownTouchEnabledListView)findViewById(R.id.special_list_view);
v.doCallback(with, parameters);
}
Si vous souhaitez obtenir un rappel sans avoir à surcharger la méthode View.onDetachedFromWindow()
, vous pouvez utiliser la méthode View.addOnAttachStateChangeListener()
, qui prend un écouteur de rappel en tant que paramètre unique.
uniquement pour API> 12 –
Pouvez-vous élaborer un peu à ce sujet. Ma classe de vue personnalisée fait partie d'un package distinct et cette vue est définie dans la présentation xml. Il n'est donc pas possible d'invoquer quelque chose de la classe d'activité. – bhups
"Il n'est donc pas possible d'invoquer quelque chose de la classe d'activité." Bien sûr que ça l'est. Appelez 'findViewById()', récupérez le widget, déposez-le dans la classe appropriée et appelez une méthode dessus. Cela étant dit, 'onDetachedFromWindow()' semble être un choix raisonnable pour moi. – CommonsWare
@CommonsWare vous commentez plus vite que je peux éditer. :) BTW, merci pour tout le travail que vous faites. Vos livres/code/réponses ont été inestimables pour moi. –