mylhyl / Android-CommonRefreshLayout

支持AbsListView、RecycleView、WebView的下拉刷新上拉加载

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

设置二次Adapter后报错

FlogFly opened this issue · comments

我在一个Activity中,对这个recycleView调用了setAdapter方法,可能在某个选项操作后。我对它要换一个Adapter显示,就再次调用setAdapter方法,就会报错,:

java.lang.IllegalStateException: Observer com.mylhyl.crlayout.SwipeRefreshRecyclerView$EmptyDataSetObserver@b58a2b1 was not registered.

因为在你的封装的SwipeRefreshRecyclerView中 ,setAdapter会调用registerAdapterDataObserver,第一次设置没问题,但是第二次设置adapter后,

 private void registerAdapterDataObserver(RecyclerView.Adapter adapter) {
        mEmptyDataSetAdapter = adapter;
        if (mEmptyDataSetAdapter == null) return;
        if (mDataSetObserver != null)
            mEmptyDataSetAdapter.unregisterAdapterDataObserver(mDataSetObserver);
        if (mDataSetObserver == null)
            mDataSetObserver = new EmptyDataSetObserver();
        mEmptyDataSetAdapter.registerAdapterDataObserver(mDataSetObserver);
        mDataSetObserver.onChanged();
    }

这个方法里面
mEmptyDataSetAdapter.unregisterAdapterDataObserver(mDataSetObserver);会报错,因为这时候的mDataSetObserver不为空,但是新的adapter并没有注册过他,调用unregisterAdapterDataObserver报错了。

感谢反馈,已经修复:com.mylhyl:commonrefreshlayout:2.4