我有一个RealmResults<Post> mPosts
对象,它在社交媒体应用程序中保存用户的提要。每当用户创建新的帖子时,帖子都会自动添加到列表的开头,因为它的日期是最新的,结果是按desc顺序排列的。现在,当用户创建一个新的帖子时,帖子被添加到列表的底部;就像它是最老的帖子一样。我不知道它是什么,但我认为它是一个bug,所以我更新到了90.0版,但它仍然在发生。
我尝试过的事情:
设置Realm
并在用户创建新帖子时调用realmResults = realmResults.sort("mDateCreated", Sort.DESCENDING)
。
设置onchange侦听器并在notifyDataSetChanged()
方法中执行上述语句
我读过realmresults对象在一个新的升级之后不再按位置排序,但是在阅读了几个so、github和realm源之后,我仍然找不到任何关于如何模拟先前的按位置排序功能的决定性信息。有人知道如何维护onChange
中RealmResults
对象的排序吗?
更新:我还尝试使用类似于Realm 90.0
的RealmResults
创建我的findAllSorted()
对象,并尝试使用上面列出的内容。仍然不起作用。
最佳答案
解决了我的问题。我已经为Post
对象创建了一个包装类,我正在通过RealmResults mPosts
类中的mDateCreated
对我的PostWrapper
对象进行排序。因此,当存储在服务器上的PostWrapper
记录的日期被设置并用于正确排序mPosts
时;当它们从服务器接收并存储在与mPosts
--UserFeedRealm
对应的域中时。当用户在手机上创建一个新的Post
对象时,我设置的是Post
对象的日期,而不是它将存储在其中的PostWrapper
对象的日期,因此由于mDateCreated
在手机上创建的PostWrapper
对象中为空,新的对象被视为PostWrapper
中最早的mPosts
对象。
这个问题似乎是在早期版本的Realm
中开始的,没有任何原因,因为我在早期版本中实现了重新登录功能,需要创建一个PostWrapper
类来保存Post
对象或Repost
对象。当我这样做时,我开始将PostWrapper
对象存储在mPosts
而不是Post
对象中,并开始按创建的mPosts
日期而不是它包含的PostWrapper
对象的创建日期对Post
进行排序;因为与它的重新发布相比,重新发布的创建日期不同。但我当时做了很多改变,所以效果没有被注意到。但本质上,这一切归结为我没有初始化必要的变量。