Подтвердить что ты не робот

В Android, как я могу выполнять действие всякий раз, когда изменяется переменная?

В Android-приложении (или в Java, если это вообще не так), какой способ вызова метода всякий раз, когда изменяется значение переменной?

4b9b3361

Ответ 1

То, что вы действительно хотите сделать, - это настроить управляемую событиями модель для запуска слушателя при возникновении события (в вашем случае, скажем, значение переменной изменилось). Это очень распространено не только для Java, но и для других языков программирования, особенно в контексте программирования пользовательского интерфейса (хотя это не обязательно только для этого)

Обычно это делается, выполняя следующие шаги:

  • Определить интерфейс, который должен реализовывать слушатель в случае возникновения события. Для вашего случая вы можете назвать его VariableChangeListener и определить интерфейс как:


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

Вы можете поместить любой аргумент, который, по вашему мнению, важно для слушателя. Абстрагируясь в интерфейс, вы обладаете гибкостью при выполнении необходимых действий в случае изменения переменной без жесткой связи с классом, где происходит событие.

  • В классе, где произошло событие (опять же в вашем случае, в классе, где переменная могла измениться), добавьте метод регистрации слушателя для события. Если вы вызываете свой интерфейс VariableChangeListener, тогда у вас будет такой метод, как

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

По умолчанию никто не слушает событие

  • В случае произошедшего события (изменена переменная) вы будете запускать слушателя, код будет выглядеть примерно как


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

Опять же, это очень распространенная практика программирования, которая в основном реагирует на изменение события или переменной. В Javascript вы видите, что это как часть onclick(), в Android вы можете проверить управляемую событием модель для различных слушателей, такую ​​как OnClickListener set на Button событие onclick. В вашем случае вы просто запускаете слушателя на основе различного события, которое происходит всякий раз, когда переменная изменилась.

Ответ 2

Вы можете сделать так. Как вы не определили, что именно хотите. Это может сработать. Предположим, что ваше имя переменной - v. Возьмите одну переменную previous_v. Сделать previous_v = v;, Вы можете ввести свой код в соответствии с вашим требованием:

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