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?
Respuesta
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
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! –
¿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
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
}
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. –
- 1. ¿Cómo ejecutar una función en JavaScript cada vez que cambia una variable?
- 2. ¿Cómo disparo algo cada vez que WindowState cambia en C#?
- 3. Establezca una variable bash cada vez que cambie el directorio
- 4. ¿Cómo ejecuto una acción en drupal después de cada vez que se guarda un nodo?
- 5. ¿Canvas se vuelve a dibujar cada vez que cambia algo?
- 6. Android C2DM Auth token, una vez o cada vez
- 7. RSync archivo único (archivo) que cambia cada vez
- 8. crear una nueva variable global única cada vez que se ejecuta una función en javascript
- 9. ¿Cómo hacer que una variable booleana cambie entre verdadero y falso cada vez que se invoca un método?
- 10. ¿Sucesivo un evento cada vez que cambia el valor de una propiedad?
- 11. ¿Cómo realizar una acción cada 5 resultados?
- 12. ¿Cómo realizo una solicitud http usando cookies en Android?
- 13. ajustar el foco de una ventana emergente cada vez que
- 14. hacer: ejecutar una acción para cada requisito
- 15. En cuanto a rendimiento, ¿es mejor llamar la longitud de una matriz dada cada vez o almacenar la longitud en una variable y llamar esa variable cada vez?
- 16. Android en Eclipse se bloquea cada vez que abro main.xml
- 17. ¿Qué acción puedo usar en WordPress que se activa cada vez que se guarda o actualiza una publicación personalizada?
- 18. Android: ¿cómo hacer una imagen de mapa seleccionable con cada país produciendo una acción diferente?
- 19. ¿Cómo llamar a una acción cuando UISwitch cambia de estado?
- 20. Jquery: realice una acción cada dos segundos
- 21. ¿Por qué recibo una advertencia cada vez que uso malloc?
- 22. Android - Obtener ubicación solo una vez
- 23. cómo pasar una variable a una acción UIButton
- 24. ¿Cuánto tiempo tarda Android Emulator en comenzar? ¿Necesita cerrar/iniciar si cada vez que cambia el código de Java?
- 25. Android servicio de enlace devuelve falso cada vez que
- 26. ¿Cómo realizo una prueba unitaria usando hilos?
- 27. ¿Cómo realizo una consulta parametrizada en CouchDB
- 28. ¿Cómo puedo cambiar una etiqueta con una fecha una vez que la fecha del sistema cambia en iOS?
- 29. ¿Cómo realizo una consulta en Mongoose?
- 30. ¿Debo almacenar en caché document.getElementById() en una variable o llamarlo cada vez?
Debe haber algún fragmento de código que cambie la variable. ¿Por qué no realiza la acción allí mismo? –
Porque el objeto al que necesito acceder cuando cambia la variable no está dentro del alcance del código que cambia la variable. – tsvallender