当我单击按钮时,我试图控制回收器查看项目的可见性,但它不起作用
我在 xml 中使用数据绑定
这是错误消息
java.lang.IndexOutOfBoundsException: Index: 5, size: 4
在我的代码中,回收器视图项具有约束布局和按钮
和约束布局具有回收器视图
我想显示约束已单击按钮的项目的布局并隐藏其他项目的约束布局
我试图解决这个问题的方法是使用以前的职位
单击按钮时,隐藏上一个位置的项目并显示当前位置的项目
下面的代码是我尝试过的
这是活动代码中的单击侦听器
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)
}
这是答案霍德勒类
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
}
}
绑定.注释是约束我提到的布局
感谢您的帮助
宁愿使用position
,请使用holder.getAdapterPosition()