আমি নতুন সমর্থন লাইব্রেরি ব্যবহার করছি 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
}
}
সাবমিটলিস্টকে যখন প্রথমবার বলা হয় তখন অ্যাডাপ্টর সমস্ত আইটেমকে রেন্ডার করে, তবে সাবমিটলিস্টকে আবার আপডেট করা অবজেক্টের বৈশিষ্ট্য সহ কল করা হয় যা পরিবর্তিত হয়েছে এমন দৃশ্যটি পুনরায় রেন্ডার করে না।
আমি তালিকাটি স্ক্রোল করার সাথে সাথে এটি ভিউটিকে পুনরায় রেন্ডার করে, যার ফলে কলগুলি ঘটে bindView()
এছাড়াও, আমি লক্ষ করেছি যে adapter.notifyDatasSetChanged()
জমা দেওয়ার পরে কল করা আপডেটের সাথে মানকে রেন্ডার করে, তবে আমি কল করতে চাই না notifyDataSetChanged()
কারণ তালিকা অ্যাডাপ্টারের অন্তর্নির্মিতের আলাদা আলাদা ব্যবহার রয়েছে
কেউ কি এখানে আমাকে সাহায্য করতে পারে?
ArtistsDiff
এবং এইভাবে এটিArtist
নিজের প্রয়োগের ক্ষেত্রে ।