Closed GGjin closed 12 months 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数据才会刷新
mtsViewModel.groupsSymbolsListFlow .sample(1000) .collect { groupSymbols -> LogUtils.w("---------") diffAdapter.submitList(groupSymbols?.firstOrNull { it.groupName == groupName }?.symbolList?.deepCopy()) diffAdapter.notifyDataSetChanged() }
测试adapter的demo发现库是没有问题的,然后通过打印日志发现areItemsTheSame里olditem和newitem的内存地址是一样的,很奇怪,然后排查了一下发现虽然listdeepcopy成新的了,但是内部的item需要遍历copy一遍,不然的话就会内存地址一样,导致不识别成新数据,所以产生的问题。
使用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数据才会刷新