मैं नए समर्थन पुस्तकालय का उपयोग कर रहा हूं 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
स्वयं के कार्यान्वयन से संबंधित है।