创建布尔监听器

Create boolean listener

In Android, how do I take an action whenever a variable changes?

所以我想为我创建的对象实现一个监听器。我想让它做的是当它的值从 false 变为 true 时执行一段代码。

由于我正在关注此线程,所以我无法理解此人希望我们在哪里实现包含侦听器逻辑的最后一段代码。

希望有人能指导我正确的方向吗?

(这个问题是因为我没有足够的代表点而被问到这里)

示例代码的最后一点会触发侦听器,因此只要 "event" 发生,它基本上就需要 运行。在这种情况下,"event" 是每当(代码中的任何地方)变量值发生变化时。

如果您有一个 setter 并且这是唯一值发生变化的地方,那就是您要放置它的地方。如果您在整个代码中的多个位置更改值,我会创建一个新的私有方法(称之为 signalChanged),将您的代码放在那里,然后在变量赋值后立即调用它听众开火。

这是一个例子(一些代码是从链接的答案中借用的,没有检查它是否编译)。

public class MyObj
{        
    public MyObj(int value)
    {
        setValue(value);
    }

    private int myValue;
    public int getValue() { return myValue; }
    public void setValue( int value )
    {
        if (value != myValue)
        {
            myValue = value;
            signalChanged();
        }
    }

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

    private VariableChangeListener variableChangeListener;
    public void setVariableChangeListener(VariableChangeListener variableChangeListener)
    {
        this.variableChangeListener = variableChangeListener;
    }

    private void signalChanged()
    {
        if (variableChangeListener != null)
            variableChangeListener.onVariableChanged(myValue);
    }
}

在Android中,与任何语言一样,大多数开发人员使用逻辑比较来检查值(if、else、switch、=、!=、>、< 等)或事件(信号)

你想实现什么样的监听器?

你必须创建一个回调接口 这是一个关于自定义侦听器的好消息 tutorial

这是一个示例

public class MyObj {
    VariableChanger onVariableChanged ;

    public void setOnVariableChanged(VariableChanger onVariableChanged) {
        this.onVariableChanged = onVariableChanged;
    }
     void log(){
        boolean changed = false;
        onVariableChanged.onVariableChanged();
        //this will call it 
    }

    interface VariableChanger{
       void onVariableChanged();
    }
}
class logic {
    MyObj mo = new MyObj();

    void main(){
        mo.setOnVariableChanged(new MyObj.VariableChanger() {

            @Override
            public void onVariableChanged() {
              //do your action
            }
        });
    }

}