您的位置:首页 > 其它

DataSetObserver猜想观察者模式

2013-01-24 15:49 232 查看
frameworks/base/core/java/android/database/DataSetObserver.java

此类的所有代码为:

public abstract class DataSetObserver{

public void onChanged(){}

public void onInvalidated(){}

}

我在想,谁调用onChanged呢?对于观察者,当数据变动时调用onChanged()吧,那应该有数据变动的地方,insert / update /delete

frameworks/base/core/java/android/widget/AdapterView.java内部类AdapterDataSetObserver继承了此类,但它也只是重写了此类中的两个方法,没有写调用关系。

frameworks/base/core/java/android/database/DataSetObserverable.java

此类的所有代码

BaseAdapter

public abstract class BaseAdapter implements ListAdapter, SpinnerAdapter {
private final DataSetObservable mDataSetObservable = new DataSetObservable();

public boolean hasStableIds() {
return false;
}

public void registerDataSetObserver(DataSetObserver observer) {
mDataSetObservable.registerObserver(observer);
}

public void unregisterDataSetObserver(DataSetObserver observer) {
mDataSetObservable.unregisterObserver(observer);
}

/**
* Notifies the attached View that the underlying data has been changed
* and it should refresh itself.
*/
public void notifyDataSetChanged() {
mDataSetObservable.notifyChanged();
}

public void notifyDataSetInvalidated() {
mDataSetObservable.notifyInvalidated();
}
...
}


从类BaseAdapter中看,这里的注册和通知动作都是通过DataSetObservable对象的,而DataSetObservable继承了Observable<DataSetObserver>。

因此,要查找那些继承自BaseAdapter,又重写了DataSetObserver的onChanged的函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: