好的,所以我之前使用过观察者的项目,并且我正在遵循完全相同的方法,但由于某种原因,我的观察者中的更新方法根本没有被调用。
在我的Android应用程序活动中:
public void newGame(View view)
{
poleLeft.clear();
}
在我的Pole课程中:
public void clear()
{
stack.clear();
size = 0;
head = 0;
setChanged();
notifyObservers();
}
在我的View类中:
private class PoleObserver implements Observer
{
public void update(Observable observable, Object data)
{
postInvalidate();
}
}
和
leftPole.addObserver(new PoleObserver());
基本上我想做的就是在极点(poleLeft)上有一定数量的项目,清除它,并重新绘制应用程序视图以反映这些变化。但是,当我单击按钮时,Pole被清除,但视图没有改变,并且在update方法中放置System.out.println永远不会输出,因此它永远不会被运行。为什么会这样?
答案 0 :(得分:0)
您是否正在执行无序操作?这个例子适合我。
import java.util.Observable;
import java.util.Observer;
public class Pole extends Observable {
public void clear()
{
setChanged();
notifyObservers();
}
public static class PoleObserver implements Observer
{
public void update(Observable observable, Object data)
{
System.out.println("Updated");
}
}
public static void main(String[] args) {
Pole p = new Pole();
p.addObserver(new Pole.PoleObserver());
p.clear();
}
}
答案 1 :(得分:0)
您似乎没有在使用poleLeft
的游戏构造函数和视图类leftPole
中发布“真实”代码。没有一个小的,可运行的例子,我们可以帮助你。
(或者这种差异可能是问题的根源!)
一些建议:
使用@override
确保update
方法确实按照您的想法实施interface
。也许你导入的另一个Observer
与你认为的那个有所不同。
使用Log
调用以确保您真正将观察者安装在您认为自己的同一个观察者身上。您可以通过将对象“identityHashCode
打印到日志中来完成此操作。