how to know if a certain view item is visible

40 Views Asked by At

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 enter image description here

 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

0

There are 0 best solutions below