如何为图像实现 DiffUtil
How to implement DiffUtil for images
你好,我听说这个库 DiffUtil 提高了回收器视图的性能,因此我的回收器视图包含图像,我最好实现它,但我不知道如何实现
Note: I didn't include the Fragment code so the question doesn't get
long but if you want more references to the code please tell me i will
update the question
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)
}
}
}
Upload.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 或片段中引用适配器,只需提交包含您的值的列表
val postAdapter = PostAdapter_Home()
postAdapter.postListDiffer.submitList(< Your List Here >)
你好,我听说这个库 DiffUtil 提高了回收器视图的性能,因此我的回收器视图包含图像,我最好实现它,但我不知道如何实现
Note: I didn't include the Fragment code so the question doesn't get long but if you want more references to the code please tell me i will update the question
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)
}
}
}
Upload.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 或片段中引用适配器,只需提交包含您的值的列表
val postAdapter = PostAdapter_Home()
postAdapter.postListDiffer.submitList(< Your List Here >)