为什么RealmRecyclerViewAdapter不起作用?

时间:2018-11-28 19:39:58

标签: android realm

Label遇到了一个奇怪的问题。我覆盖该类,为初始数据指定import tkinter as tk root = tk.Tk() # Function hovering def on_enter(e): lab['background'] = 'green' def on_leave(e): lab['background'] = 'white' # Click def on_click(e): print("hi") # Create the frame with a label inside fr = tk.Frame(root) lab = tk.Label(fr, text="Test", width=20, background="white") # Packing fr.pack() lab.pack() # Bindings fr.bind("<Enter>", on_enter) fr.bind("<Leave>", on_leave) lab.bind("<Button-1>", on_click) # Loop root.mainloop() ,为RealmRecyclerViewAdapter指定null。适配器已经为RecyclerView注册。然后稍后在true中执行以下操作:

autoUpdate

但是,尽管我知道有结果,但显示“活动”时,RecyclerView为空。当我启动调试器并进入在onResume()内部创建的侦听器时,我可以看到发生了什么。 theAdapter.updateData(myQuery.findAllAsync());参数中没有添加,删除或删除的范围,但是RealmRecyclerViewAdapter参数也不是changeSet。这意味着它永远不会调用changeSet。我可以在null参数中看到我的300多个结果。

我粘贴了以下代码。我认为应该为真,但事实并非如此的条件是notifyDataSetChanged()。知道这里发生了什么吗?他们是否将Realm更改为从不返回空更改集,而忘记了更新适配器?

我正在运行Realm 5.4.1,适配器是2.0.0。

编辑:作为实验,我在调用collection之后在主线程上添加了if (changeSet == null)。实际上,这会使RecyclerView填充结果,因为查询有时间在适配器开始尝试将值绑定到视图持有者之前完成异步。这并不是什么意外,但我认为我会分享。

Thread.sleep(1000)

1 个答案:

答案 0 :(得分:2)

  

Realm 5.4.1,适配器为 2.0.0

这就是为什么。

您必须将realm-android-adapters更新为3.0.0或更高版本。


  

Realm-Java 5.0.0(2018-03-15)

     

重大更改

     

OrderedRealmCollectionChangeListener.onChange()中的OrderedCollectionChangeSet参数不再可以为空。改用changeSet.getState()(#5619)。


  

Realm-Android-Adapters 3.0.0(2018-04-06)

     

重大更改

     

仅适用于Realm Java 5.0.0+。 (#137

公关说:

  

添加对非空变更集的支持

具有以下更改:

            if (changeSet == null) {
                notifyDataSetChanged();
                return;
            }

///////////////////////////////////////////

            if (changeSet.getState() == OrderedCollectionChangeSet.State.INITIAL) {
                notifyDataSetChanged();
                return;
            }

因此在Realm 5.0.0+中,changeSet永远不会为null,因此不会触发notifyDataSetChanged()