W systemie Android jak wykonać działanie, gdy zmienna ulegnie zmianie?

W aplikacji na Androida (lub bardziej ogólnie w Javie, jeśli nie jest inaczej), jaki jest najlepszy sposób wywołania metody za każdym razem, gdy zmienia się wartość zmiennej?

Author: tsvallender, 2011-08-23

2 answers

To, co naprawdę chcesz zrobić, to skonfigurować model sterowany zdarzeniami, aby wyzwalał detektor, gdy wydarzy się zdarzenie(w Twoim przypadku, powiedzmy, że wartość zmiennej się zmieniła). Jest to bardzo powszechne nie tylko w Javie, ale także w innych językach programowania, zwłaszcza w kontekście programowania interfejsu użytkownika (choć niekoniecznie tylko do tego)

Zazwyczaj odbywa się to wykonując następujące kroki:

  • zdecyduj, jaki interfejs powinien zaimplementować słuchacz w przypadku zdarzenia jest / align = "left" / W Twoim przypadku możesz nazwać go VariableChangeListener i zdefiniować interfejs jako:


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

Możesz umieścić każdy argument, który uważasz, że jest ważny dla słuchacza, aby poradzić sobie tutaj. Abstrahując do interfejsu, masz elastyczność implementacji niezbędnej akcji w przypadku zmiany zmiennej bez ścisłego powiązania jej z klasą, w której występuje zdarzenie.

  • w klasie, w której miało miejsce zdarzenie (ponownie w Twoim przypadku, Klasa gdzie zmienna może się zmienić), dodać metodę rejestrowania słuchacza dla zdarzenia. Jeśli wywołasz swój interfejs VariableChangeListener to będziesz miał metodę taką jak

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

Domyślnie nikt nie słucha zdarzenia

  • W przypadku wystąpienia zdarzenia (zmienna się zmieniła), uruchomisz listener, kod będzie wyglądał jak coś w stylu


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

Ponownie jest to bardzo powszechna praktyka w programowaniu, aby w zasadzie reagować na zmiana zdarzenia lub zmiennej. W Javascript widzisz, że jest to część onclick (), w Androidzie możesz sprawdzić model sterowany zdarzeniami dla różnych detektorów, takich jak onclicklistener ustawiony na przycisk onclick event. W Twoim przypadku po prostu uruchomisz listener na podstawie innego zdarzenia, które jest ilekroć zmienna się zmieniła

 56
Author: momo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-23 07:03:15

Możesz zrobić jak this.As nie zdefiniowałeś tego, czego chcesz exactly.It może zadziałać. Załóżmy, że nazwa zmiennej to v. Weźmy jedną zmienną previous_v. Make previous_v=v; . Możesz umieścić swój kod zgodnie z wymaganiami:

if(v!=previous_v){
//your stuffs
}
 -5
Author: Android Killer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-23 06:38:46