Позиция представления переработчика Android возникает с ошибкой индекса

Я пытался контролировать видимость элемента просмотра ресайклера, когда я нажимаю кнопку, но это не работает

Я использую привязку данных в xml

это сообщение об ошибке

java.lang.IndexOutOfBoundsException: индекс: 5, размер: 4

В моем коде элемент представления recycler имеет ограничениеLayout и кнопку

И у limitedLayout есть вид переработчика

Я хочу показать limitedLayout элемента, который нажал кнопку, и скрыть ограничения другого элемента.

Способ, которым я пытался решить эту проблему, - использовать предыдущую позицию

При нажатии кнопки скрыть элемент предыдущей позиции и показать элемент текущей позиции

приведенный ниже код - это то, что я пробовал

это 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 — это limitedLayout, которого я коснулся

Спасибо за помощь


person HyeonSeok    schedule 17.10.2019    source источник


Ответы (1)


Вместо использованияposition используйте holder.getAdapterPosition()

person alex87    schedule 17.10.2019
comment
Я заменил position наholder.adapterPosition (способ kotlin), но он все равно не работает. Спасибо за помощь - person HyeonSeok; 17.10.2019