首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >holder.bindingAdapterPosition返回-1

holder.bindingAdapterPosition返回-1
EN

Stack Overflow用户
提问于 2022-07-06 02:58:34
回答 1查看 148关注 0票数 0

绑定适配器位置正在返回-1,我不知道为什么,有人知道我可能做错了什么?

holder.bindingAdapterPosition in onCreateViewHolder.

适配器与viewHolder

代码语言:javascript
运行
复制
class CommentAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>() {

    private var likeClick: LikeClick? = null
    private var disLikeClick: DisLikeClick? = null

    inner class CommentHolder(view: View) : RecyclerView.ViewHolder(view) {
        val nicknameTextView: TextView = itemView.findViewById(R.id.nickname_text_view)
        val commentTextView: TextView = itemView.findViewById(R.id.comment_text_view)
        val likeCount: TextView = itemView.findViewById(R.id.like_count_text_view)
        val disLikeCount: TextView = itemView.findViewById(R.id.dislike_count_text_view)
        val likeBtn: ImageButton = itemView.findViewById(R.id.like_image_btn)
        val disLikeBtn: ImageButton = itemView.findViewById(R.id.disLike_Image_btn)

    }


    fun setLikeClickListener(clickListener: LikeClick) {
        likeClick = clickListener
    }
    fun setDisLikeClickListener(clickListener: DisLikeClick) {
        disLikeClick = clickListener
    }

    private val diffCallback = object : DiffUtil.ItemCallback<Comment>() {
        override fun areItemsTheSame(oldItem: Comment, newItem: Comment): Boolean {
            return oldItem.id == newItem.id
        }

        override fun areContentsTheSame(oldItem: Comment, newItem: Comment): Boolean {
            return oldItem.id == newItem.id
        }


    }

    private val diff = AsyncListDiffer(this, diffCallback)


    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.list_item_comment, parent, false)


        val holder: RecyclerView.ViewHolder = CommentHolder(view)

        //set on click listener for like and dislike
        Log.d("TESTLOG",diff.currentList.toString())
        //TODO FIX
        val commentItem = diff.currentList[holder.bindingAdapterPosition]
        val likeBtn=view.findViewById<ImageButton>(R.id.like_image_btn)
        val dislikeBtn=view.findViewById<ImageButton>(R.id.disLike_Image_btn)

        likeBtn.setOnClickListener {
            likeClick?.onLikeClick(commentItem.id,likeBtn)
        }

        dislikeBtn.setOnClickListener {
            disLikeClick?.onDisLikeClick(commentItem.id,dislikeBtn)
        }

        return holder
    }

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {

        val commentItem = diff.currentList[position]
                val videoHolder = holder as CommentHolder
                videoHolder.apply {
                    commentTextView.text = commentItem.comment
                    nicknameTextView.text = commentItem.nickname
                    likeCount.text = commentItem.commentlike.toString()
                    disLikeCount.text = commentItem.dislike.toString()


                    //check if user already liked/disliked this comment and change icon based on that
                    Utils.likes.forEach {
                        if(it == commentItem.id){
                            likeBtn.isSelected=true
                        }
                    }

                    Utils.disLikes.forEach {
                        if(it==commentItem.id){
                            disLikeBtn.isSelected=true
                        }
                    }

                }
    }

    override fun getItemCount(): Int {
        return diff.currentList.size
    }

    fun submitList(list: List<Comment>) {
        diff.submitList(list)
    }

    interface LikeClick {
        fun onLikeClick(commentId: Int, likeBtn:ImageButton)
    }
    interface DisLikeClick {
        fun onDisLikeClick(commentId: Int, disLikeBtn:ImageButton)
    }
}

Log.d in oncreateViewHolder

显示diff.currentlist包含的内容。

代码语言:javascript
运行
复制
D/TESTLOG: [Comment(comment=firstcomment
    , commentlike=0, createdAt=2022-07-06T04:35:43.000Z, dislike=0, id=4, nickname=Alpac, videoId=170c3d0c-331f-4da9-974b-39703940f819)]

,我在其中设置适配器

我向适配器提交了一个注释列表,设置为和不喜欢侦听器,然后将适配器应用于recyclerView

代码语言:javascript
运行
复制
ChikiCommentsFetcher().fetchCommentsOfAVideo(videoId).observe(viewLifecycleOwner){
            commentsRecyclerView.apply {
                commentAdapter.submitList(it)
                commentAdapter.setLikeClickListener(this@CommentsFragment)
                commentAdapter.setDisLikeClickListener(this@CommentsFragment)
                adapter=commentAdapter
            }
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-06 06:10:27

应在onBindViewHolder方法中处理Holder位置。另外,将单击移动到onBindViewHolder方法。

代码语言:javascript
运行
复制
holder.likeBtn.setOnClickListener {
        likeClick?.onLikeClick(commentItem.id,likeBtn)
    }

    holder.dislikeBtn.setOnClickListener {
        disLikeClick?.onDisLikeClick(commentItem.id,dislikeBtn)
    }

查看本RecyclerView教程

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72877490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档