6

I do search of items and every time I fetch from server When I search "o" it works and then "ot" it works again and as a result of "o" search I have let's say 20 items and in case "ot" I have 10 items which are part of that 20 items and I do remove t in EditText it shows 20 items only the recyclerview scroll indicator is in the middle Here is my Code for 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)
    })

Here you can see the video I have filmed https://drive.google.com/drive/folders/1ia5y9TtL0PSAM1M4hVBILWcdSK1BDyKI?usp=sharing

I.S
  • 1,904
  • 2
  • 25
  • 48

2 Answers2

5

I want to answer my own question as I got an answer from 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)

Here is my code:

searchAdapter.submitList(it) {
   viewBinding.searchList.scrollToPosition(0)
}
Artem Mostyaev
  • 3,874
  • 10
  • 53
  • 60
I.S
  • 1,904
  • 2
  • 25
  • 48
1

This is expected behaviour for DiffUtil. If you want to scroll to the top of your RecyclerView after the result have been updated, you can call layoutManager.scrollToPositionWithOffset(0, 0), or recyclerView.smoothScrollToPosition(0)

PPartisan
  • 8,173
  • 4
  • 29
  • 48
  • where should I call layoutManager.scrollToPositionWithOffset(0, 0) ? – I.S Aug 27 '19 at 13:46
  • After your recyclerview's adapter has been updated (i.e. `notifyDataSetChanged()`), or after you've called `dispatchUpdatesTo(...)` on your `DiffResult` – PPartisan Aug 27 '19 at 13:48
  • I don't call notifyDataSetChanged() and I have submitList() in adapter and DiffUtil.ItemCallback<>() and my Adapter extends ListAdapter(diffCallback) – I.S Aug 27 '19 at 13:50
  • I'm not familiar with this `SearchAdapter`, is it part of a library? Try calling `scrollTo...` after you've called `submitList(...)`? – PPartisan Aug 27 '19 at 13:53
  • SearchAdapter is my adapter – I.S Aug 27 '19 at 13:59