CymChad / BaseRecyclerViewAdapterHelper

BRVAH:Powerful and flexible RecyclerAdapter
http://www.recyclerview.org/
MIT License
24.2k stars 5.14k forks source link

4.0.0-beta14版本使用BaseDifferAdapter已添加SymbolDiffCallback,调用submitList方法后屏幕内数据不刷新,需要移除屏幕后再移回数据才显示到屏幕上,这是为什么啊。 #3785

Closed GGjin closed 1 year ago

GGjin commented 1 year ago

这是diffcallback代码 `class SymbolDiffCallback : DiffUtil.ItemCallback() { override fun areItemsTheSame(oldItem: ShareSymbolData, newItem: ShareSymbolData): Boolean = oldItem.name == newItem.name

override fun areContentsTheSame(oldItem: ShareSymbolData, newItem: ShareSymbolData): Boolean = oldItem.ask == newItem.ask && oldItem.bid == newItem.bid

override fun getChangePayload(oldItem: ShareSymbolData, newItem: ShareSymbolData): Any? =
    if (oldItem.ask != newItem.ask || oldItem.bid != newItem.bid) {
        newItem
    } else
        null

}` 这是调用submitList的方法

diffAdapter.submitList(groupSymbols?.firstOrNull { it.groupName == groupName }?.symbolList)

adapter的 override fun onBindViewHolder(holder: VH, position: Int, item: ShareSymbolData?, payloads: List<Any>) 也重写了

limuyang2 commented 1 year ago

完整的代码贴一下

limuyang2 commented 1 year ago

我这里测试了下,功能是正常的

GGjin commented 1 year ago

mtsViewModel.groupsSymbolsListFlow .buffer() .collectLatest { it-> LogUtils.w("---------") diffAdapter.submitList(it) } 上面是刷新的代码,

https://github.com/CymChad/BaseRecyclerViewAdapterHelper/assets/19795509/71fc6089-a010-4956-b7ab-46e0706d867c

上面有录屏,看时间就好了,屏幕内划走再划回来以后时间才刷新 adapter就是正常的写法

limuyang2 commented 1 year ago

那就要检查下你的 areContentsTheSameonBindViewHolder 代码了

limuyang2 commented 1 year ago

长时间未回复,问题先关闭了

GGjin commented 1 year ago

我现在有两个疑问 一个就是为什么划到屏幕外再划归来 数据就会刷新 以及使用notifyItemChanged(index, newData)的话 也会一条条的刷新,但是我想要整体数据一起刷新的效果 ,所以还想使用submitList, image image 后面就是正常赋值显示的代码

GGjin commented 1 year ago

长时间未回复,问题先关闭了

不好意思 前几天回了一趟老家,没有用电脑的环境就没有看github

GGjin commented 1 year ago

这个issue能reopen吗,不然还需要重新开一个。

AlbertZyc commented 8 months ago

出现同样的问题,submitList第一次不刷新,