Android-ресайклер в позиции просмотра происходит ошибка индекса - PullRequest
0 голосов
/ 17 октября 2019

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

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

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

java.lang.IndexOutOfBoundsException: Index: 5, Size: 4

В моем коде элемент представления рециркулятора имеет constraintLayout и кнопку

И constraintLayout имеет вид рециркулятора

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

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

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

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

это 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 - это ограничение. Я затронул

спасибо за вашу помощь

1 Ответ

0 голосов
/ 17 октября 2019

Скорее, чем position, используйте holder.getAdapterPosition()

...