【发布时间】:2011-11-01 16:42:15
【问题描述】:
在 Android 应用程序中(或者更普遍的 Java,如果没有什么不同的话),当变量的值发生变化时调用方法的最佳方式是什么?
【问题讨论】:
-
一定有一些代码改变了变量 - 你为什么不自己采取行动呢?
-
因为变量改变时我需要访问的对象不在代码改变变量的范围内。
在 Android 应用程序中(或者更普遍的 Java,如果没有什么不同的话),当变量的值发生变化时调用方法的最佳方式是什么?
【问题讨论】:
您真正想要做的是设置事件驱动模型以在事件发生时触发侦听器(在您的情况下,假设变量值已更改)。这不仅在 Java 中很常见,对于其他编程语言也很常见,尤其是在 UI 编程的上下文中(尽管不一定只适用于此)
这通常通过以下步骤来完成:
public interface VariableChangeListener {
public void onVariableChanged(Object... variableThatHasChanged);
}
您可以将任何您认为对侦听器处理很重要的论点放在此处。通过抽象到接口中,您可以灵活地在变量发生更改的情况下实施必要的操作,而无需将其与发生事件的类紧密耦合。
// 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 中,您可以检查各种侦听器的事件驱动模型,例如在 Button onclick 事件上设置的 OnClickListener。在您的情况下,您只需根据变量发生变化时的不同事件触发侦听器
【讨论】:
setVariableChangeListener 方法吗?既然VariableChangeListener 是一个接口,那么究竟传递给setVariableChangeListener 的是什么?
你可以这样。因为你还没有明确你想要什么。它可能会起作用。假设你的变量名是 v。取一个变量 previous_v。使previous_v=v; .您可以根据自己的要求输入您的代码:
if(v!=previous_v){
//your stuffs
}
【讨论】: