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)
答案 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()
。