每次从服务器获取内容时,我都会搜索项目 当我搜索“ o”时它起作用,然后“ ot”它又起作用,由于“ o”搜索,我假设有20个项目,如果“ ot”有10个项目 这是这20个项目的一部分,我确实在EditText中删除了t,它显示20个项目,只有recyclerview滚动指示器在中间 这是我的diffUtil代码
ListAdapter<Asset, SearchAdapter.ViewHolder>(object : DiffUtil.ItemCallback<Asset>() {
override fun areItemsTheSame(oldItem: Asset, newItem: Asset): Boolean {
return oldItem.assetId == newItem.assetId && oldItem.originalTitle ==newItem.originalTitle
}
override fun areContentsTheSame(oldItem: Asset, newItem: Asset): Boolean {
return oldItem == newItem
}
}
viewModel.searchAssets.observe(viewLifecycleOwner, Observer {
searchAdapter.submitList(it)
})
在这里您可以看到我拍摄的视频 https://drive.google.com/drive/folders/1ia5y9TtL0PSAM1M4hVBILWcdSK1BDyKI?usp=sharing
答案 0 :(得分:0)
这是DiffUtil
的预期行为。如果要在更新结果后滚动到RecyclerView
的顶部,可以调用layoutManager.scrollToPositionWithOffset(0, 0)
或recyclerView.smoothScrollToPosition(0)
答案 1 :(得分:0)
我想回答自己的问题,因为我得到了Yiğit的答复
submit list has another overload which receives a callback when list applied
you can use that one and just call rv.scrollToPosition(0)
这是我的代码
searchAdapter.submitList(it) {
viewBinding.searchList.scrollToPosition(0)
}