LRecyclerView LRecyclerView$DataObserver@97905af was not registered.

时间: 2017-10-12 20:48 栏目: Android 浏览: 8255 赞: 2 踩: 0 字体:

以下为本篇文章全部内容:

最近接手以前同事留下来的Android,一上来就遇到了不少坑,我本着填坑的心情来接手,看了代码简直可以用崩溃来形容,没有使用bean,共用写得也不像可以共用的东西。其中还有一个是Fragment更换三个,里面使用到了LRecyclerView,那好吧,我们直接进入主题。

上图采用了一个ViewPage和Fragment切换三个不同的内容,在布局文件控件代码,下面代码可以看到使用了LRecyclerView控件

<com.github.jdsjlzx.recyclerview.LRecyclerView
    android:id="@+id/lrecycler_View"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />

通过获取到LRecyclerView控件然后设置Adapter的时候竟然爆出了下面的错误

java.lang.IllegalStateException: Observer com.github.jdsjlzx.recyclerview.LRecyclerView$DataObserver@97905af was not registered.
                                                                     at android.database.Observable.unregisterObserver(Observable.java:69)
                                                                     at android.support.v7.widget.RecyclerView$Adapter.unregisterAdapterDataObserver(RecyclerView.java:6537)
                                                                     at com.github.jdsjlzx.recyclerview.LRecyclerView.setAdapter(LRecyclerView.java:139)
                                                                     at zs.yeecolor.com.activity.collection.Collection_worker$2.handleMessage(Collection_worker.java:180)
                                                                     at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                     at android.os.Looper.loop(Looper.java:154)
                                                                     at android.app.ActivityThread.main(ActivityThread.java:6374)
                                                                     at java.lang.reflect.Method.invoke(Native Method)
                                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

主要是was not registered.这里,根本看不出来是什么意思没有注册,直到跟到


重要错误是unregisterAdapterDataObserver引起的,其实这个错误在别的适配器大家可能也会看到。主要的解决办法呢是可以先判断这个控件的适配器是否为空,如果为空就设置 适配器否则就不重复设置了。这里我得到的控件是lrecyclerView,针对LRecyclerView设置适配器的时候可以判断

if (lrecyclerView.getAdapter()==null) {
    LRecyclerViewAdapter mLRecyclerViewAdapter = new LRecyclerViewAdapter(adapter);
    lrecyclerView.setAdapter(mLRecyclerViewAdapter);
}

这样就解决了问题了