将 Recyclerview 与 DiffUtil.ItemCallback 一起使用不会滚动到顶部?

I.S*_*I.S 7 android android-recyclerview android-diffutils

我搜索项目,每次从服务器获取当我搜索“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)
    })
Run Code Online (Sandbox Code Playgroud)

在这里您可以看到我拍摄的视频 https://drive.google.com/drive/folders/1ia5y9TtL0PSAM1M4hVBILWcdSK1BDyKI?usp=sharing

I.S*_*I.S 6

我想回答我自己的问题,因为我从 Yi\xc4\x9fit 得到了答案

\n
\n

提交列表有另一个重载,当列表应用时,它会收到回调,您可以使用该重载,只需调用 rv.scrollToPosition(0)

\n
\n

这是我的代码:

\n
searchAdapter.submitList(it) {\n   viewBinding.searchList.scrollToPosition(0)\n}\n
Run Code Online (Sandbox Code Playgroud)\n


PPa*_*san 1

这是 的预期行为DiffUtilRecyclerView如果您想在结果更新后滚动到顶部,您可以调用layoutManager.scrollToPositionWithOffset(0, 0), 或recyclerView.smoothScrollToPosition(0)