由于只能在创建它们的线程中访问RealmObject,因此无法使用 ListAdapter 来使用RealmObject,因为使用了 AsyncListDiffer 在这种情况下,您将获得此异常
来自错误线程的领域访问。只能在创建对象的线程上访问领域对象。
还有其他选择吗?我的第一个建议是将RealmObject映射到表示视图数据的Pojo中,但是由于列表上有很多更改,这会减慢UI线程的速度。
答案 0 :(得分:0)
如果仅在DiffUtil.ItemCallback中进行简单比较,则可以使用一个类包装Realm数据。
class User: RealmObject {
@PrimaryKey
var uuid: String? = null
}
data class WrappedUserData(val uuid: Long, val user: User)
然后使用该类作为适配器的项目类型
class MyAdapter: ListAdapter<WrappedUserData, ItemViewHolder>
并使用包装的类进行比较。
private val ITEM_CALLBACK = object : DiffUtil.ItemCallback<WrappedUserData>() {
override fun areItemsTheSame(oldItem: WrappedUserData, newItem: WrappedUserData): Boolean {
return oldItem.uuid == newItem.uuid
}
override fun areContentsTheSame(oldItem: WrappedUserData, newItem: WrappedUserData): Boolean {
return oldItem.uuid == newItem.uuid
}
}
调用myAdapter.submitList
时,只需要将原始数据映射到WrappedUser列表即可。
答案 1 :(得分:0)
使用Realm.copyFromRealm()
以来可用的0.87.0
来复制已经持久的RealmObject。