В Android-приложении (или в Java, если это вообще не так), какой способ вызова метода всякий раз, когда изменяется значение переменной?
В Android, как я могу выполнять действие всякий раз, когда изменяется переменная?
Ответ 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
}