在RecyclerView可扩展项目上的ToggleButton setOnCheckedChangeListener,也会在之前展开的项目上调用

时间:2018-04-07 19:08:52

标签: android android-recyclerview kotlin listener

在我的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
    }
}

问题是当ToggleButtonchecked/unchecked时,每个项目都会设置toggleActive属性。

编辑: 我已经看到这个问题与expand/collapse项目(CardView容器)的能力有关。我总是让每个项目都得到扩展,现在ToggleButton工作正常。无论如何,我需要这些物品来碰撞。我已经更新了上面的代码,看看我是如何设法扩展和折叠项目的。

编辑2: 现在,我可以确认未在每个项目上调用ToogleButton侦听器,但仅在current expanded itemprevious expanded item上调用。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我终于找到了这个bug的解决方案。该问题与setOnCheckedChangeListener有关。

在我的适配器中,我给了ToggleButton.isChecked保存在SharedPreferences上的值,这就是调用监听器。用setOnClickListener更改了它,现在工作得很完美!