ListAdapter
ฉันใช้ห้องสมุดการสนับสนุนใหม่ นี่คือรหัสของฉันสำหรับอะแดปเตอร์
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)
}
}
}
ฉันกำลังอัปเดตอะแดปเตอร์ด้วย
musicViewModel.getAllArtists().observe(this, Observer {
it?.let {
artistAdapter.submitList(it)
}
})
คลาสที่แตกต่างของฉัน
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
}
}
สิ่งที่เกิดขึ้นคือเมื่อมีการเรียก submitList ในครั้งแรกที่อะแด็ปเตอร์แสดงผลรายการทั้งหมด แต่เมื่อมีการเรียก submitList อีกครั้งด้วยคุณสมบัติของวัตถุที่อัปเดตจะไม่แสดงมุมมองที่เปลี่ยนไปอีกครั้ง
มันแสดงผลมุมมองอีกครั้งเมื่อฉันเลื่อนรายการซึ่งจะเรียก bindView()
นอกจากนี้ฉันสังเกตเห็นว่าการโทรadapter.notifyDatasSetChanged()
หลังจากส่งรายการทำให้มุมมองมีค่าที่อัปเดต แต่ฉันไม่ต้องการโทรnotifyDataSetChanged()
เพราะอะแดปเตอร์รายการมียูทิลิตี้ที่แตกต่างกันในตัว
ใครสามารถช่วยฉันที่นี่?
ArtistsDiff
และทำให้การดำเนินงานของArtist
ตัวเอง