2011-08-23 7 views
27

En una aplicación para Android (o Java en general si no es diferente), ¿cuál es la mejor manera de llamar a un método cada vez que cambia el valor de una variable?En Android, ¿cómo realizo una acción cada vez que cambia una variable?

+0

Debe haber algún fragmento de código que cambie la variable. ¿Por qué no realiza la acción allí mismo? –

+9

Porque el objeto al que necesito acceder cuando cambia la variable no está dentro del alcance del código que cambia la variable. – tsvallender

Respuesta

54

Lo que realmente quiere hacer es configurar el modelo orientado a eventos para desencadenar un oyente cuando un evento ocurra (en su caso, dicen que un valor de la variable ha cambiado) Esto es muy común no sólo para Java, pero para otros lenguajes de programación, así especialmente en el contexto de la programación de interfaz de usuario (aunque no es necesariamente sólo para eso)

Normalmente esto se hace al hacer los siguientes pasos:

  • Decida la interfaz que el oyente debe implementar en caso de que se desencadene el evento. Para su caso, se le puede llamar VariableChangeListener y definir la interfaz como:


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

Se puede poner cualquier argumento que usted piensa que es importante para el oyente para manejar aquí. Al abstraer en la interfaz, tiene flexibilidad para implementar la acción necesaria en el caso de que la variable haya cambiado sin un acoplamiento estricto con la clase donde se está produciendo el evento.

  • En la clase donde ocurrió el evento (nuevamente en su caso, la clase donde la variable podría cambiar), agregue un método para registrar un oyente para el evento. Si llama a su VariableChangeListener interfaz, entonces tendrá un método como

    // 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; 
    } 

Por defecto no hay nadie escuchando al evento

  • En el caso del evento ocurrido (variable ha cambiado) , a continuación, activar el oyente, el código se vería algo así como


    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); 
    } 

De nuevo t Esta es una práctica muy común en la programación para básicamente reaccionar a un evento o cambio variable. En Javascript puede ver que esto es parte de onclick(), en Android puede verificar el modelo impulsado por eventos para varios oyentes como OnClickListener en un evento onclick Button. En su caso, solo activará el oyente en función de un evento diferente, siempre que la variable haya cambiado

+7

I * think * es posible que finalmente haya ayudado a que el centavo se quede con los oyentes con esta explicación. ¡Esta página está siendo marcada! –

+1

¿Podría alguien explicar cuándo debería llamarse al método 'setVariableChangeListener'? Dado que 'VariableChangeListener' es una interfaz, ¿qué pasa exactamente a' setVariableChangeListener'? – AvP

-4

Puede hacer lo siguiente. Como no ha definido exactamente lo que quiere, puede que funcione. Supongamos que su nombre de variable es v.Tome una variable previous_v. Hacer previous_v = v; . Usted puede poner en su código de acuerdo a sus necesidades:

if(v!=previous_v){ 
//your stuffs 
} 
+3

Esto no funcionaría, porque simplemente verificaría si una vez y luego nunca volvería a verificar. El autor desea saber CUÁNDO se cambia la variable, como un fondo mientras el ciclo sigue revisando. –

Cuestiones relacionadas