java - 安卓/Java : Watch for variable change from main class

标签 java android class

我不想检查我的 xClass 中的变量是否从我的主类更改。事实是,我的变量仅在单击 ImageView 时更改并且它在线程中运行,所以我不想检查在一个 while 循环中(我不知道这是否可能)在我的主类中当变量被更改时做一些事情。这就是我尝试的,但是当我运行程序时它只是停止,什么都不做。

Thread setBack = new Thread() {
            public void run() {
                knight.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Counter++;
                        //also have some code here.
                    }
                }
};

这是我的线程,Counter 是我想要观察的值。我使用 get 方法返回值。

public boolean getCounter(){
            if(Counter>=1){
                return true;
            }
            return false;
}

所以这表明值已更改(计数器是全局变量)。 这就是我在主课上所做的。

while (true) {
    if (xClass.getCounter()) {
        // do something
    }
}

这是我的程序实际停止运行的地方。我想不出任何其他方法来获取值已更改的指标。

感谢任何帮助,谢谢。

最佳答案

对于 observer pattern 这听起来是个不错的选择.您在这里要做的是不通过 Counter++ 而是使用诸如

之类的函数来更改变量
private void incrementCounter() {
  Counter++;
  observer.notify();
}

同时将以下内容添加到您的 xClass.java 中:

private VariableChangeObserver observer;

public void register(VariableChangeObserver observer) {
  this.observer = observer;
}

然后您可以让 Main.java 实现如下接口(interface):

public interface VariableChangeObserver {
  /**
   * Called whenever the variable is changed.
   */
  public void notify();
}

最后但同样重要的是,将 notify() 函数添加到您的 Main.java 中,它会在值更新时执行您想执行的任何操作。

附加信息: 一般来说,您将拥有一份观察员名单,而不仅仅是一个。但是,如果您知道在任何给定时间您只会有一个观察者,这就足够了。

关于java - 安卓/Java : Watch for variable change from main class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17065075/

相关文章:

java - jframe组件布局

java - 使用 AND/OR 组合的 Elasticsearch Java 查询

java - Android 上的 String.format() 应该能够感知时区吗?

android - anchor 导航不适用于三星 Android 设备

c++ - 从类 C++ 返回映射

c# - 如何重新初始化或重置类的属性?

java - 将大量二进制数据加载到原始 JVM 字节码中的 `[B` 中

java - 将 Web 服务与 Java 中的其他后端重型计算服务分离

android - 在 Android 中的谷歌地图的标记信息窗口中添加 Spinner

javascript - 我可以在JS中获取一个对象,但不能获取它的属性