在Android中,只要变量发生变化,我该如何采取行动?

问题描述 投票:33回答:3

在Android应用程序中(或Java,如果没有不同,更普遍的说,当变量值改变时,调用方法的最佳方法是什么?

java android listener
3个回答
61
投票

您真正想要做的是设置事件驱动模型,以在事件发生时触发侦听器(在您的情况下,说变量值已更改)。这不仅对于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中,您可以检查事件驱动器模型以了解各种侦听器,例如OnClickListener onclick事件上设置的Button。在您的情况下,您仅会基于不同的事件触发侦听器,这是每当变量更改时]


0
投票

现在有一个更简单的解决方案。只需将变量包装在LiveData特别是MutableLiveData中即可。


-6
投票

您可以这样进行。由于您尚未确切定义所需的内容,因此可能会起作用。假设您的变量名称为v。取一个变量previous_v。设为previous_v = v; 。您可以根据需要输入代码:

© www.soinside.com 2019 - 2024. All rights reserved.