Android: Escuchar cambios de variables

He estado buscando un ejemplo de KISS de cómo hacer esto, y mientras que todos parecen (y he pasado por todos ellos!) Bastante simple, todavía no puedo obtener mi cabeza alrededor del concepto. Me refiero a oyentes personalizados (que no se extienden nada) … En particular, la creación de un oyente para una variable booleana para que pueda establecer algunos métodos cuando su valor cambia.

Este es un ejemplo de un ejemplo que he probado: android cómo hacer escucha a una variable personalizada?

Si alguien tiene el tiempo para explicar a un oyente personalizado y cómo funciona en inglés, eso sería muy apreciado. Espero que una vez que entienda exactamente cómo el oyente es notificado de un cambio, entonces podré crear mi propio y entender cómo funciona la maldita cosa. Esto me está dando un dolor de cabeza … Gracias de antemano

Aquí es donde estoy en el momento:

public class ChangeListener { boolean boo = false; public ChangeListener(boolean b){ boo = b; } private listener l = null; public interface listener{ public void onChange(boolean b); } public void setChangeListener(listener mListener){ l = mListener; } public void somethingChanged(){ if(l != null){ l.onChange(boo); } } } 

Esta es una instantánea de mi actividad principal:

 public class Main extends Activity implements ChangeListener.listener{ private ChangeListener listener; private boolean boo = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); listener = new ChangeListener(boo); listener.setChangeListener(this); listener.somethingChanged(); } @Override public void onChange(boolean b) { // TODO Auto-generated method stub Toast.makeText(this, "REST = "+b, Toast.LENGTH_SHORT).show(); } } 

Ahora, cuando la actividad comienza, el brindis muestra el estado de boo … genial. El problema es que esto sólo ocurre dentro de onCreate, lo que tiene sentido como .somethingChanged se coloca allí. Lo que me gustaría es que el Toast se genere cada vez que boo se cambia de false a true, y true a false independientemente de si dentro de onCreate o no. Es decir:

  • Haga clic en un botón
  • Hace que boo cambie de falso a verdadero
  • El oyente recoge el cambio y ejecuta lo que está en onChange

Sé que podría utilizar el botón actionListener para hacer esto, pero me gustaría estar lejos de esto si es posible, que en el momento estoy empezando a pensar que es imposible.

Cualquier idea sería muy apreciada. ¡Gracias por adelantado!

2 Solutions collect form web for “Android: Escuchar cambios de variables”

Se ajusta la variable dentro de una clase personalizada de modo que las únicas funciones de acceso también disparen al oyente. Así que la única manera de dar la vuelta al interruptor es a través de las funciones que conmuta y llama al oyente.

 public class BooVariable { private boolean boo = false; private ChangeListener listener; public boolean isBoo() { return boo; } public void setBoo(boolean boo) { this.boo = boo; if (listener != null) listener.onChange(); } public ChangeListener getListener() { return listener; } public void setListener(ChangeListener listener) { this.listener = listener; } public interface ChangeListener { void onChange(); } } 

Para supervisar el cambio que necesita para implementar BooVariable.ChangeListener y, a continuación, pasar la clase BooVariable una copia de "esto", entonces, cuando se cambia la variable que llama onChange.

Además, teniendo en cuenta que sólo puede en línea el código en lugar de extender directamente:

 BooVariable bv = new BooVariable(); bv.setListener(new BooVariable.ChangeListener() { @Override public void onChange() { Toast.makeText(MainActivity.this,"blah", Toast.LENGTH_LONG).show(); } }); 

PD. El brindis debe ser llamado desde el hilo de interfaz de usuario, por lo que necesita cambiar el Looper si va a cambiar la variable en un hilo diferente. Esto probablemente no saldrá sin embargo.

Creo que lo que quieres se responde aquí. Esto es lo que usé cuando necesitaba escuchar un valor booleano que se ha cambiado https://stackoverflow.com/a/7157281/2258389

  • Enviar una variable entre las clases a través de la Intención
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.