实现SortedList方法的回调

来源:爱站网时间:2022-11-11编辑:网友分享
实现SortedList方法的回调有没有想了解下的?爱站技术频道小编在此分享下这方面的内容,能为正在困扰的朋友带来不小的帮助。需要的话欢迎随时来查看。

问题描述


RecyclerView库最近添加了新的SortedList类。假设我有一个实现SortedList方法的回调,该方法可以随时间变化,即可以将基础Comparator切换出去。告诉compare()完全重新使用其数据的最佳方法是什么?

思路一:


这是我自己的观点(用科特林写):

compare()

您可以看到,每次调用SortedList后,我都会跟踪新索引,因此每个项目只能重新执行一次,并且不会跳过任何项目。

此方法有效,但似乎非常浪费,因为list.beginBatchedUpdates() val indices = (0..list.size() - 1).toArrayList() while (!indices.isEmpty()) { val i = indices.first() val item = list.get(i) list.recalculatePositionOfItemAt(i) [suppress("USELESS_CAST_STATIC_ASSERT_IS_FINE")] indices.remove(list.indexOf(item) as Any) //cast to disambiguate remove() } list.endBatchedUpdates() 会两次调整基础数组的大小以删除并读取该项目。 recalculatePositionOfItemAt()然后将执行新的二进制搜索,即使该索引是已知的。

Edit:如果项目比较相等,这似乎导致无限循环。

替代方法(全部删除,然后全部添加):

recalculatePositionOfItemAt()

思路二:


[遗憾的是,没有api。只需复制源并自己添加该方法即可。支持数据只是一个数组,因此您可以在其上调用Arrays.sort,然后调用通知数据集已更改。当整个世界都在变化时,跟踪变化并不是一件容易的事,因此对于排序列表而言,这并不是真正合适的情况。请在b.Android.com上创建功能请求。

思路三:


以下方法对我有用,可以切换到新的比较器以重新排序列表。我发现动画更加流畅了,另外调用了indexOf

list.beginBatchedUpdates()

val copy = (list.size() - 1 downTo 0).map { list.removeItemAt(it) }
copy.forEach { list.add(it) }

list.endBatchedUpdates()

爱站技术频道小编分享了三种思路方法给大家,希望你们看完“实现SortedList方法的回调”文章后都知道怎么处理了。 没有看过瘾的朋友,来网站翻阅吧,会让你收获满满。

上一篇:Spring Boot项目中读取yaml配置文件的解决方法

下一篇:Java数组实现M模式的实例代码

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载