Question

J'ai un composant personnalisé qui étend LinearLayout, j'ai besoin d'exécuter certaines instructions lorsque la mise en page est détruite ou supprimée. (ou sur le point d'être supprimé)

Une façon consiste à vérifier l'onPause () ou l'onDestroy () d'une activité et des méthodes d'appel du composant personnalisé. Mais je veux retirer cette au-dessus de l'activité. De sorte que le composant personnalisé lui-même peut gérer lorsque la disposition est détachée. Mais je trouve la méthode appropriée pour remplacer (pour détecter l'événement) lorsque la disposition est supprimée. Existe-t-il un moyen de gérer cela, ou nous devons utiliser la méthode d'activité onPause () et onResume ()?

Était-ce utile?

La solution

Il est dangereux de s'appuyer sur la "destruction" d'une mise en page pour exécuter des déclarations, car vous ne contrôlez pas directement le moment où cela se produit. La manière acceptée et la bonne pratique consiste à utiliser le Le cycle de vie de l'activité pour ça.

Mais si tu veux vraiment Attachez votre composant à ce cycle de vie, Je suggère que votre composant implémente une interface (quelque chose comme Removable), Et faites quelque chose comme ça dans votre alliance de base (que toutes vos activités étendent):

protected Set<Removable> myRemovableItems = new HashSet<Removable>();

@Override
public void onPause() {
    super.onPause();
    for (Removable removable : myRemovableItems) {
        removable.remove();
    }
}

L'interface:

public interface Removable {
    void remove();
}

Ensuite, chaque fois que vous ajoutez un de votre composant personnalisé à partir d'une activité, vous ajoutez le composant à l'ensemble interne de Removable de l'activité, et son remove La méthode sera automatiquement appelée chaque fois que l'activité est interrompue.

Cela vous permettrait de spécifier quoi faire quand onPause est appelé dans le composant lui-même. Mais ça ne s'assurerait pas qu'il s'appelle automatiquement, pour cela, vous devrez le faire dans l'activité.

Noter: vous pouvez utiliser onStop à la place de onPause Selon le moment où vous souhaitez que le retrait se produise.

Autres conseils

J'ai réussi à remplacer le onAttachedToWindow() et onDetachedFromWindow() Méthodes:

@Override
protected void onAttachedToWindow() {
    super.onAttachedToWindow();
    // View is now attached
}

@Override
protected void onDetachedFromWindow() {
    super.onDetachedFromWindow();
    // View is now detached, and about to be destroyed
}

Vous pouvez demander à votre vue personnalisée d'écouter ses propres événements. Je suggère d'utiliser View.onattachstatechangeListener Et écouter l'événement Ondetach.

@Override
void onViewDetachedFromWindow(View v) {
 doCleanup();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top