3

我搜索项目,每次从服务器获取时,当我搜索“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

4

2 回答 2

4

我想回答我自己的问题,因为我得到了 Yiğit 的回答

提交列表有另一个重载,它在应用列表时接收回调,您可以使用那个并调用 rv.scrollToPosition(0)

这是我的代码:

searchAdapter.submitList(it) {
   viewBinding.searchList.scrollToPosition(0)
}
于 2019-08-27T20:08:50.967 回答
1

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

于 2019-08-27T13:45:15.350 回答