Android: écoute de changements variables

J'ai cherché un exemple de KISS sur la façon de le faire, et alors qu'ils semblent tous (et je les ai tous passés à tous!) Assez simple, je ne peux toujours pas aborder le concept. Je me réfère à des auditeurs personnalisés (ceux qui ne s'étendent pas) … En particulier, créer un auditeur pour une variable booléenne afin que je puisse mettre en marche certaines méthodes lorsque sa valeur change.

Ceci est un exemple d'exemple que j'ai essayé: Android comment faire de l'auditeur à une variable personnalisée?

  • Auditeur d'événements personnalisé Android
  • Android, Checkbox listenener en XML?
  • Quelle est la différence entre un auditeur et un récepteur (Android)?
  • Android AudioRecord vs. MediaRecorder pour l'enregistrement audio
  • AudioRecord enregistre le son intermittent dans Android L Aperçu du développeur
  • Récupérer l'événement clé sur EditText
  • Si quelqu'un a le temps d'expliquer un auditeur personnalisé et comment cela fonctionne en anglais, cela serait très apprécié. J'espère qu'une fois que je comprends exactement comment l'auditeur est informé d'un changement, alors je pourrai créer mon propre et comprendre comment fonctionne la tristesse. Cela me donne du mal de tête … Merci d'avance

    Voici là où je suis actuellement:

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

    Ceci est un instantané de mon activité principale:

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

    Maintenant, lorsque l'activité commence, le Toast affiche l'état de boo … super. Le problème est que cela ne se produit que dans onCreate, ce qui est logique car .somethingChanged est placé là-dedans. Ce que j'aimerais, c'est que le Toast soit généré chaque fois que le boo est changé de faux en vrai et vrai à faux, peu importe si c'est à l'intérieur de Create ou non. C'est à dire:

    • Cliquez sur un bouton
    • Les causes changent de faux à vrai
    • L'auditeur reprend le changement et exécute tout ce qui se passe sur Changement

    Je sais que je pourrais simplement utiliser le bouton actionListener pour le faire, mais j'aimerais m'éloigner de cela si possible, ce qui, au moment où je commence à penser, est impossible.

    Toute opinion serait très appréciée. Merci d'avance!

  • Android: jouez le fichier mp3 à partir de la ressource brute sur le clic d'une TextView
  • Comment implémenter un auditeur
  • Android AudioRecord vs. MediaRecorder pour l'enregistrement audio
  • AudioRecord enregistre le son intermittent dans Android L Aperçu du développeur
  • Android, Checkbox listenener en XML?
  • Récupérer l'événement clé sur EditText
  • 2 Solutions collect form web for “Android: écoute de changements variables”

    Vous enveloppez la variable dans une classe personnalisée de telle sorte que les seules fonctions d'accès déclenchent également l'auditeur. Ainsi, la seule façon de basculer le commutateur est via les fonctions qui bascule et appelle l'auditeur.

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

    Pour surveiller la modification, vous devez implémenter BooVariable.ChangeListener, puis passer la classe BooVariable une copie de "this" puis, lorsque vous modifiez la variable qu'elle appelleChange.

    Aussi, en gardant à l'esprit, vous pouvez simplement intégrer le code plutôt que d'étendre directement:

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

    PS. Le toast doit être appelé à partir du thread UI, donc vous devez changer le Looper si vous modifiez la variable dans un thread différent. Cela ne se produira probablement pas.

    Je pense que ce que vous voulez est répondu ici. C'est ce que j'ai utilisé quand j'avais besoin d'écouter une valeur booléenne modifiée https://stackoverflow.com/a/7157281/2258389

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.