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

时间:2019-08-27 13:37:46

标签: 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)
    })

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

2 个答案:

答案 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) }