[英]How to implement DiffUtil for images
您好,我听说这个库 DiffUtil 提高了回收器视图的性能,因此我的回收器视图包含图像,对我来说实现它会更好,但我不知道如何
注意:我没有包含片段代码,所以问题不会很长,但是如果您想要更多对代码的引用,请告诉我我会更新问题
PostAdapter_Home.kt
class PostAdapter_Home(var mcontext: Context, var mUploads: MutableList<Upload?>?) :
RecyclerView.Adapter<PostAdapter_Home.PostViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PostViewHolder {
val view: View
view = LayoutInflater.from(mcontext)
.inflate(R.layout.post_item_container_home_ex, parent, false)
return PostViewHolder(view)
}
override fun onBindViewHolder(holder: PostViewHolder, position: Int) {
val shimmer = ColorHighlightBuilder()
.setBaseColor(Color.parseColor("#F3F3F3"))
.setBaseAlpha(1f)
.setHighlightColor(Color.parseColor("#E7E7E7"))
.setHighlightAlpha(1f)
.setDropoff(50f)
.build()
val shimmerDrawable = ShimmerDrawable()
shimmerDrawable.setShimmer(shimmer)
val uploadCurrent = mUploads?.get(position)
Glide.with(mcontext)
.load(uploadCurrent?.getmImageUrl())
.diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
.placeholder(shimmerDrawable)
.fitCenter()
.into(holder.imageView)
}
override fun getItemCount(): Int {
return mUploads?.size!!
}
// public long getId() {
// return this.id;
// }
//
// @Override
// public long getItemId(int position) {
// return mUploads.get(position).Id;
// }
fun setUploads(uploads: MutableList<Upload?>?) {
mUploads = uploads
}
class PostViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val imageView: ShapeableImageView
init {
imageView = itemView.findViewById(R.id.imagePostHome)
}
}
}
上传.kt
package com.example.myappnotfinal.AdaptersAndMore
import com.google.firebase.database.Exclude
class Upload {
internal var mImageUrl: String? = null
private var mKey: String? = null
constructor() {}
constructor(imageUrl: String?) {
mImageUrl = imageUrl
}
fun getmImageUrl(): String? {
return mImageUrl
}
fun setmImageUrl(mImageUrl: String?) {
this.mImageUrl = mImageUrl
}
@Exclude
fun getmKey(): String? {
return mKey
}
@Exclude
fun setmKey(Key: String?) {
mKey = Key
}
}
这是 DiffUtil.ItemCallback 的一个实现。
Diff Util 回调 class
class PostDiffUtil : DiffUtil.ItemCallback<Upload>() {
override fun areItemsTheSame(oldItem: Upload, newItem: Upload): Boolean = oldItem == newItem
override fun areContentsTheSame(oldItem: Upload, newItem: Upload): Boolean =
oldItem.toString() == newItem.toString()
}
上传数据 class
data class Upload(
var mImageUrl: String? = null,
@Exclude @set:Exclude @get:Exclude
var mKey: String? = null
)
适配器 class。
class PostAdapter_Home : RecyclerView.Adapter<PostAdapter_Home.PostViewHolder>() {
private val postDiffUtil = PostDiffUtil()
val postListDiffer = AsyncListDiffer(this, postDiffUtil)
override fun getItemCount(): Int = postListDiffer.currentList.size
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PostViewHolder =
PostViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.post_item_container_home_ex, parent, false))
override fun onBindViewHolder(holder: PostViewHolder, position: Int) {
holder.bindView(postListDiffer.currentList[position])
}
class PostViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val imageView: ShapeableImageView = itemView.findViewById(R.id.imagePostHome)
fun bindView(upload: Upload) {
val shimmer = ColorHighlightBuilder()
.setBaseColor(Color.parseColor("#F3F3F3"))
.setBaseAlpha(1f)
.setHighlightColor(Color.parseColor("#E7E7E7"))
.setHighlightAlpha(1f)
.setDropoff(50f)
.build()
val shimmerDrawable = ShimmerDrawable()
shimmerDrawable.setShimmer(shimmer)
Glide.with(imageView.context)
.load(upload?.getmImageUrl())
.diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
.placeholder(shimmerDrawable)
.fitCenter()
.into(imageView)
}
}
}
更新列表。 在 Activity 或 Fragment 中引用适配器,然后使用您的值提交列表
val postAdapter = PostAdapter_Home()
postAdapter.postListDiffer.submitList(< Your List Here >)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.