我不想检查我的 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/