【问题标题】:Android recycler view position occurs index errorAndroid recycler view位置出现index错误
【发布时间】:2019-10-17 01:48:44
【问题描述】:

我尝试在单击按钮时控制回收站视图项目的可见性,但它不起作用

我在 xml 中使用数据绑定

这是错误信息

java.lang.IndexOutOfBoundsException:索引:5,大小:4

在我的代码中,recycler view item 有一个 constraintLayout 和 button

并且constraintLayout有recycler view

我想显示单击按钮的项目的约束布局并隐藏其他项目的约束布局

我试图解决这个问题的方法是使用以前的位置

当按钮被点击时,隐藏前一个位置的项目并显示当前位置的项目

下面的代码是我试过的

这是活动代码中的 clickListener

answerAdapter.onItemClickListener = object : QnaDetailAdapter.OnItemClickListener {
        override fun onClick(
            view: View,
            position: Int,
            holder: QnaDetailAdapter.AnswerHolder
        ) {

            if (prePosition != -1)
                binding.recyclerViewAnswer[prePosition].comment_holder.visibility = View.GONE
            if (binding.recyclerViewAnswer[position].comment_holder.visibility == View.GONE) {
                binding.recyclerViewAnswer[position].comment_holder.visibility = View.VISIBLE
                prePosition = position
            } else {
                binding.recyclerViewAnswer[position-1].comment_holder.visibility = View.GONE
                prePosition = -1
            }
        }
    }

这是适配器的 onBindViewHodler

override fun onBindViewHolder(holder: AnswerHolder, position: Int) {

    if (onItemClickListener != null) {
        holder.btnComment.setOnClickListener { v ->
            onItemClickListener?.onClick(v, position, holder)
        }
    }

    holder.layout.recycler_view_comment.layoutManager = LinearLayoutManager(context)
    holder.layout.recycler_view_comment.setHasFixedSize(true)
    holder.layout.recycler_view_comment.adapter = adapter

    val item = answerList[position]
    holder.bind(item)
}

这是 AnswerHodler 类

class AnswerHolder(private val binding: QnaDetailItemBinding) :
    RecyclerView.ViewHolder(binding.root) {

    val btnComment: Button = binding.btnComment
    val layout: ConstraintLayout = binding.commentHolder

    fun bind(item: Answer) {
        binding.item = item
    }
}

binding.comment 是我接触到的约束布局

感谢您的帮助

【问题讨论】:

    标签: android android-recyclerview android-databinding android-mvvm koin


    【解决方案1】:

    与其使用position,不如使用holder.getAdapterPosition()

    【讨论】:

    • 我将 position 替换为 holder.adapterPosition(kotlin way) 但它仍然不起作用。感谢您的帮助
    猜你喜欢
    • 2022-12-12
    • 2015-10-18
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    相关资源
    最近更新 更多