在我的RecyclerView
Adapter
我有以下代码:
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val isExpanded = position == expandedPosition
holder.itemView.configurationLayout.visibility = if (isExpanded) View.VISIBLE else View.GONE
holder.itemView.isActivated = isExpanded
if (isExpanded) previousExpandedPosition = position
holder.itemView.expandButton.setOnClickListener {
expandedPosition = if (isExpanded) -1 else position
notifyItemChanged(previousExpandedPosition)
notifyItemChanged(position)
}
var item = items[position]
holder.itemView.itemToggleButton.setOnCheckedChangeListener { buttonView, isChecked ->
item.toggleActive = isChecked
}
}
问题是当ToggleButton
为checked/unchecked
时,每个项目都会设置toggleActive
属性。
编辑:
我已经看到这个问题与expand/collapse
项目(CardView
容器)的能力有关。我总是让每个项目都得到扩展,现在ToggleButton
工作正常。无论如何,我需要这些物品来碰撞。我已经更新了上面的代码,看看我是如何设法扩展和折叠项目的。
编辑2:
现在,我可以确认未在每个项目上调用ToogleButton
侦听器,但仅在current expanded item
和previous expanded item
上调用。
提前感谢您的帮助!
答案 0 :(得分:0)
我终于找到了这个bug的解决方案。该问题与setOnCheckedChangeListener有关。
在我的适配器中,我给了ToggleButton.isChecked保存在SharedPreferences上的值,这就是调用监听器。用setOnClickListener更改了它,现在工作得很完美!