Yeni destek kitaplığını kullanıyorum ListAdapter
. İşte adaptör için kodum
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)
}
}
}
Adaptörü ile güncelliyorum
musicViewModel.getAllArtists().observe(this, Observer {
it?.let {
artistAdapter.submitList(it)
}
})
Dif sınıfım
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
}
}
Bağdaştırıcının tüm öğeleri oluşturduğu ilk kez submitList çağrıldığında olan şey, ancak güncellenmiş nesne özellikleriyle tekrar submitList çağrıldığında, değişen görünümü yeniden oluşturmuyor.
Listeyi kaydırırken görünümü yeniden oluşturuyor, bu da sırayla bindView()
Ayrıca, adapter.notifyDatasSetChanged()
gönderme listesinden sonra çağırmanın görünümü güncellenmiş değerlerle oluşturduğunu fark ettim , ancak notifyDataSetChanged()
liste bağdaştırıcısının yerleşik diff araçları olduğu için aramak istemiyorum
Biri bana yardım edebilir mi?
ArtistsDiff
ve dolayısıylaArtist
kendisiyle ilgili olabilir .