RecyclerView after delete any item lift bottom item up and redraw it at the same time. It looks strange. How can i solve this problem? (how it looks https://youtu.be/hKmNWwfxfzM !)
val swipeHandler = object : SwipeToDeleteCallback(requireContext()) {
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
viewModel.deleteNote(viewModel.noteListLiveData.value!![viewHolder.adapterPosition])
}
}
val itemTouchHelper = ItemTouchHelper(swipeHandler)
itemTouchHelper.attachToRecyclerView(binding.noteRecyclerView)
Use LiveData to update RV
viewModel.noteListLiveData.observe(
viewLifecycleOwner, { notes -> noteAdapter.submitList(notes) }
)
DiffUtil and Adapter
private inner class DiffCallback : DiffUtil.ItemCallback<NoteEntity>() {
override fun areItemsTheSame(oldItem: NoteEntity, newItem: NoteEntity): Boolean {
return oldItem.id == newItem.id
}
override fun areContentsTheSame(oldItem: NoteEntity, newItem: NoteEntity): Boolean {
return oldItem == newItem
}
}
private inner class NoteAdapter :
ListAdapter<NoteEntity, NoteHolder>(DiffCallback()) {
override fun getItemCount(): Int {
return super.getItemCount()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NoteHolder {
val view = layoutInflater.inflate(R.layout.list_item_note, parent, false)
return NoteHolder(view)
}
override fun onBindViewHolder(holder: NoteHolder, position: Int) {
holder.bind(getItem(position))
}
}
I have been looking for a solution to the problem for a long time, but I could not understand what the reason is
sorry for my bad english, it's not my native language