2011-08-23 102 views
27

在一个Android应用程序(或更一般的Java,如果没有不同),每当一个变量的值发生变化时调用方法的最佳方式是什么?在Android中,如何在变量发生变化时采取行动?

+0

必须有一段代码改变变量 - 你为什么不在那里采取行动? –

+9

因为变量更改时我需要访问的对象不在代码的范围内,所以不能更改变量。 – tsvallender

回答

54

你真的想要做的是建立事件驱动模型触发听者当一个事件发生什么(在你的情况,说一个变量的值发生了变化:您可以根据您的要求把你的代码)。这是很常见的,不仅对Java,但对于其他编程语言,以及特别是在UI编程的情况下(虽然它并不一定只对)

这通常是通过执行以下步骤来完成:

  • 决定侦听器在事件触发时应该实现的接口。对于你的情况,你可以把它叫做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中,您可以检查各种侦听器的事件驱动模型,例如在Button onclick事件上设置的OnClickListener。在你的情况下,你只需根据不同的事件触发监听器,即每当变量发生变化时

+7

我*想*你可能终于帮助这个便士为我听这个解释的听众。此页面正在添加书签! –

+1

有人可以解释什么时候应该调用setVariableChangeListener方法吗?由于'VariableChangeListener'是一个接口,究竟是什么传入'setVariableChangeListener'? – AvP

-4

你可以像这样做。因为你没有定义你想要的东西。它可能工作。假设你的变量名是v.拿一个变量previous_v。使previous_v = v; 。

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

这不起作用,因为它只会检查一次,然后再次检查。作者想知道变量何时发生变化,就像一个不断检查的背景while循环。 –

相关问题