你仍然可以从
bind()
函数传递的参数中传递url。还有一件事,你应该将Picasso替换为Glide。有很多关于为什么使用Glide而不是Picasso的信息。
例如,我有一个名为User的数据类,如下所示:
data class User (
val name: String? = null,
val avatarUri: String? = null
)
然后为您的User
创建一个视图持有者。在视图持有者中,您有一个图像视图,该图像视图将从Picasso加载图像。
class MyViewHolder (
private val binding: ItemDetailBinding
) : RecyclerView.ViewHolder(binding.root) {
fun bind(item: User) {
binding.executePendingBindings()
Picasso.get().load(item.avatarUri).into(binding.ivItem)
}
}
在ListAdapter中,具体来说是在
onBindViewHolder()
函数中,您调用视图持有者的绑定函数并将参数传递给它。
class MoviesAdapter : ListAdapter<User, MyViewHolder>(MyDiffUtil) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val inflate = ItemDetailBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return MyViewHolder(inflate)
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.bind(getItem(position))
}
}
object MyDiffUtil : DiffUtil.ItemCallback<User>() {
override fun areItemsTheSame(oldItem: User, newItem: User): Boolean =
oldItem.name == newItem.name
override fun areContentsTheSame(oldItem: User, newItem: User): Boolean =
oldItem == newItem
}
ivItem
,因为你可以通过holder
访问到ImageView
。 - Amirhosein