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方法后屏幕内数据不刷新,发现需要手动调用notifyDataSetChanged数据才会变化 #3786

Closed GGjin closed 12 months ago

GGjin commented 1 year ago

使用flow将数据发送出来,每秒刷新一次数据 mtsViewModel.groupsSymbolsListFlow .sample(1000) .collect { groupSymbols -> LogUtils.w("---------") diffAdapter.submitList(groupSymbols?.firstOrNull { it.groupName == groupName }?.symbolList?.deepCopy()) diffAdapter.notifyDataSetChanged() } 但是发现不调用notifyDataSetChanged的情况下,数据没有变化,当滑动recyclerview将item移除后 再返回数据才会变化,或者每次submitList后手动调用notifyDataSetChanged数据才会刷新

GGjin commented 12 months ago

测试adapter的demo发现库是没有问题的,然后通过打印日志发现areItemsTheSame里olditem和newitem的内存地址是一样的,很奇怪,然后排查了一下发现虽然listdeepcopy成新的了,但是内部的item需要遍历copy一遍,不然的话就会内存地址一样,导致不识别成新数据,所以产生的问题。