【发布时间】:2020-10-16 03:14:15
【问题描述】:
当我打开应用程序时,保存 ImageView 可以工作,但是当我单击保存时它不会更新保存的 ImageView ,它仅在我滚动 recyclerview 并滚动回该位置时才有效。
如果它在收藏列表中,我会使用 Room 数据库更新回收站视图项
class AdapterHomeMovie(
private val databaseDao: DatabaseDao,
private val onClick: (Movie) -> Unit,
private val onSave: (Movie) -> Unit
) : ListAdapter<Movie, MovieViewHolder>(DiffCallBack) {
override fun onBindViewHolder(holder: MovieViewHolder, position: Int) {
val item = getItem(position)
val scope = CoroutineScope(Dispatchers.IO)
holder.bind(item, onSave)
holder.itemView.setOnClickListener { onClick(item) }
if (databaseDao.isSaved(item.title)) holder.imgSave.setImageResource(R.drawable.ic_save_yellow)
else holder.imgSave.setImageResource(R.drawable.ic_save_normal)
holder.imgSave.setOnClickListener {
scope.launch {
if (databaseDao.isSaved(item.title)) {
databaseDao.deleteSaveMovie(item.title)
} else {
databaseDao.insertDownloading(
SaveMovie(item.title, item.thumbnail, item.id, item.sid, item.rating.toLong(), System.currentTimeMillis())
)
}
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MovieViewHolder {
return MovieViewHolder(ItemMovieBinding.inflate(LayoutInflater.from(parent.context), parent, false))
}
companion object{
val DiffCallBack = object : DiffUtil.ItemCallback<Movie>() {
override fun areItemsTheSame(oldItem: Movie, newItem: Movie): Boolean {
return oldItem.title == newItem.title
}
override fun areContentsTheSame(oldItem: Movie, newItem: Movie): Boolean {
return oldItem == newItem
}
override fun getChangePayload(oldItem: Movie, newItem: Movie): Any? {
return super.getChangePayload(oldItem, newItem)
}
}
}
}
【问题讨论】:
标签: android android-recyclerview