RecyclerView 中的观察者模式思考

RecyclerView 中的观察者模式,是始终只会存在一个观察者嘛?
我在查看 setAdapter() 的过程中,发现会先查看是否设置过 Adapter, 如果设置过会注销观察者,然后注册观察者。
如果只存在一个观察者的话,那么我想请问 RecyclerView 中使用观察者的意义是?

阅读 2.4k
1 个回答
概念错误

RecyclerView.setAdapter(Adapter)是运用的适配器模式;
Adapter.registerAdapterDataObserver(AdapterDataObserver)才是运用的观察者模式。

public abstract static class Adapter<VH extends ViewHolder> {
    private final AdapterDataObservable mObservable = new AdapterDataObservable();
    ...

    public void registerAdapterDataObserver(@NonNull AdapterDataObserver observer) {
            mObservable.registerObserver(observer);
    }

    ...
}

static class AdapterDataObservable extends Observable<AdapterDataObserver> {
    ...
}

public abstract class Observable<T> {
    /**
     * The list of observers.  An observer can be in the list at most
     * once and will never be null.
     */
    protected final ArrayList<T> mObservers = new ArrayList<T>();

    ...

    public void registerObserver(T observer) {
        if (observer == null) {
            throw new IllegalArgumentException("The observer is null.");
        }
        synchronized(mObservers) {
            if (mObservers.contains(observer)) {
                throw new IllegalStateException("Observer " + observer + " is already registered.");
            }
            mObservers.add(observer);
        }
    }

    ...
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏