web-dev-qa-db-fra.com

Sous Android, comment entreprendre une action chaque fois qu'une variable change?

Dans une Android (ou Java plus généralement si ce n'est pas différent), quelle est la meilleure façon d'appeler une méthode chaque fois que la valeur d'une variable change?)

33
tsvallender

Ce que vous voulez vraiment faire, c'est configurer un modèle piloté par les événements pour déclencher un écouteur lorsqu'un événement se produit (dans votre cas, disons qu'une valeur de variable a changé). Ceci est très courant non seulement pour Java, mais aussi pour d'autres langages de programmation, en particulier dans le contexte de la programmation d'interface utilisateur (bien que ce ne soit pas nécessairement uniquement pour cela)

Cela se fait généralement en procédant comme suit:

  • Décidez de l'interface que l'auditeur doit implémenter en cas de déclenchement de l'événement. Pour votre cas, vous pouvez l'appeler VariableChangeListener et définir l'interface comme:


    public interface VariableChangeListener {
        public void onVariableChanged(Object... variableThatHasChanged);
    }

Vous pouvez mettre ici tout argument que vous pensez qu'il est important pour l'auditeur de le gérer. En faisant un résumé dans l'interface, vous avez la flexibilité d'implémenter l'action nécessaire dans le cas où la variable a changé sans la coupler étroitement avec la classe où l'événement se produit.

  • Dans la classe où l'événement s'est produit (à nouveau dans votre cas, la classe où la variable pourrait changer), ajoutez une méthode pour enregistrer un écouteur pour l'événement. Si vous appelez votre interface VariableChangeListener, vous aurez une méthode telle que

    // while I only provide an example with one listener in this method, in many cases
    // you could have a List of Listeners which get triggered in order as the event 
    // occurres
    public void setVariableChangeListener(VariableChangeListener variableChangeListener) {
       this.variableChangeListener = variableChangeListener;
    }

Par défaut, personne n'écoute l'événement

  • Dans le cas d'un événement survenu (la variable a changé), vous déclencherez alors l'écouteur, le code ressemblerait à quelque chose comme


   if( variableValue != previousValue && this.variableChangeListener != null) {
       // call the listener here, note that we don't want to a strong coupling
       // between the listener and where the event is occurring. With this pattern
       // the code has the flexibility of assigning the listener
       this.variableChangeListener.onVariableChanged(variableValue);
   }

Encore une fois, c'est une pratique très courante dans la programmation pour essentiellement réagir à un événement ou à un changement de variable. En Javascript, vous voyez que cela fait partie de onclick (), dans Android vous pouvez vérifier le modèle piloté par les événements pour divers écouteurs tels que OnClickListener défini sur un Button onclick event. Dans votre cas, vous déclencherez simplement l'écouteur en fonction d'un événement différent, à chaque fois que la variable a changé

57
momo