Я пытался управлять видимостью элемента представления рециркулятора при нажатии кнопки, но он не работает
Я использую привязку данных в 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 - это ограничение. Я затронул
спасибо за вашу помощь