I was making an app where you get posts on your feed in a recyclerview.I have a text view for the number of views in my listItem layout and i want to update that in real time based on the number of times it was viewed
class PostPagingAdapter : PagingDataAdapter<Post, PostPagingAdapter.PostViewHolder>(Companion) {
lateinit var listener: (Post) -> Unit
companion object : DiffUtil.ItemCallback<Post>() {
override fun areItemsTheSame(oldItem: Post, newItem: Post): Boolean {
return oldItem.postId == newItem.postId
}
override fun areContentsTheSame(oldItem: Post, newItem: Post): Boolean {
return oldItem == newItem
}
}
override fun onBindViewHolder(holder: PostViewHolder, position: Int) {
val post = getItem(position) ?: throw Exception("null fetched")
holder.setIsRecyclable(false)
with(holder.binding) {
titleText.text = post.titleText
matterText.text = post.contentText
postDateText.text = getDateTime(post.timeStamp)
author.text = post.ownerName
authorCategory.text = post.ownerType
postCard.setOnClickListener { listener(post) }
viewCount.text = post.views.toString()
if (post.imageUrI?.isNotEmpty() == true) {
Picasso.get().load(post.imageUrI).into(featuredImage)
}
}
}
inner class PostViewHolder(val binding: PostListItemBinding) :
RecyclerView.ViewHolder(binding.root)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PostViewHolder {
return PostViewHolder(
PostListItemBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
)
)
}
}
Attaching my recycler view above,i want to know when a post item was viewed,based on that incrementing the views field for each post item in the firestore database (the database i am using) would be easy.
@Parcelize
data class Post(
val postId: String = "",
val ownerId: String = "",
val titleText: String = "",
val imageUrI: String? = "",
val contentText: String = "",
val ownerName: String ="",
val ownerType: String ="",
val timeStamp: Long = 0L,
val upVotes: Int = 0,
val downVotes: Int = 0,
val views: Int = 0
) : Parcelable
The only challenge being,getting to know when a particular post item was viewed