Open
Description
我在一个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报错了。
Metadata
Assignees
Labels
No labels
Activity