我尝试在我的 Application 子类中实现静态 Observable,但它不起作用。没有异常或错误消息,但我的 update() 回调没有被调用。
MyApplication.java
public class MyApplication extends Application{
public static Observable appObserver = new Observable();
public void onCreate(){
super.onCreate();
}
}
Foo.java
MyApplication.appObserver.notifyObservers( "Hello world" );
BarFragment.java
public class BarFragment extends Fragment implements Observer{
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
MyApplication.appObserver.addObserver(this);
}
@Override
public void onDestroy() {
MyApplication.appObserver.deleteObserver(this);
super.onDestroy();
}
@Override
public void update(Observable observable, Object data) {
Log.i("BarFragment", data.toString()); // Should log, but doesn't
}
}
此外,我试着写下我自己的一个简单的 Observable,然后只需将 public static Observable appObserver = new Observable();
替换为 public static MyObservable appObserver = new MyObservable();
MyObservable.java
public class MyObservable {
protected List<Object> observers = new ArrayList<Object>();
public void addObserver(Object observer){
observers.add(observer);
}
public void notifyObservers(Object data){
for( int i=0; i<observers.size(); i++ ){
((Observer) observers.get(i)).update(null, data);
}
}
}
我错过了什么?
如果重要的话,我正在装有 Android 2.3.6 的 Nexus One 上进行测试。
最佳答案
似乎我错过了 Observer 机制的一个关键部分,显然必须在 notifyObservers()
之前调用 setChanged()
。但问题是,setChanged()
是 protected ,因此只对 Observable 的任何子类可见。
所以我想它不应该以我尝试使用它的方式使用,但下面的 hackish 子类会起作用...
public class MyObservable extends Observable{
@Override
public boolean hasChanged() {
return true; //super.hasChanged();
}
}
关于java - 可观察/观察者不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21962276/