Tôi đang sử dụng thư viện hỗ trợ mới ListAdapter
. Đây là mã của tôi cho bộ điều hợp
class ArtistsAdapter : ListAdapter<Artist, ArtistsAdapter.ViewHolder>(ArtistsDiff()) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(parent.inflate(R.layout.item_artist))
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(getItem(position))
}
class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
fun bind(artist: Artist) {
itemView.artistDetails.text = artist.artistAlbums
.plus(" Albums")
.plus(" \u2022 ")
.plus(artist.artistTracks)
.plus(" Tracks")
itemView.artistName.text = artist.artistCover
itemView.artistCoverImage.loadURL(artist.artistCover)
}
}
}
Tôi đang cập nhật bộ điều hợp với
musicViewModel.getAllArtists().observe(this, Observer {
it?.let {
artistAdapter.submitList(it)
}
})
Lớp khác của tôi
class ArtistsDiff : DiffUtil.ItemCallback<Artist>() {
override fun areItemsTheSame(oldItem: Artist?, newItem: Artist?): Boolean {
return oldItem?.artistId == newItem?.artistId
}
override fun areContentsTheSame(oldItem: Artist?, newItem: Artist?): Boolean {
return oldItem == newItem
}
}
Điều gì đang xảy ra là khi submitList được gọi lần đầu tiên bộ điều hợp hiển thị tất cả các mục, nhưng khi submitList được gọi lại với các thuộc tính đối tượng được cập nhật, nó không hiển thị lại chế độ xem đã thay đổi.
Nó hiển thị lại chế độ xem khi tôi cuộn danh sách, đến lượt nó gọi bindView()
Ngoài ra, tôi nhận thấy rằng việc gọi adapter.notifyDatasSetChanged()
sau khi gửi danh sách hiển thị chế độ xem với các giá trị cập nhật, nhưng tôi không muốn gọi notifyDataSetChanged()
vì bộ điều hợp danh sách có tích hợp sẵn diff utils
bất cứ ai có thể giúp tôi ở đây?
ArtistsDiff
và do đó đến việc thực hiệnArtist
chính nó.