我创建了一个嵌套的可扩展回收器视图。当我单击一个项目时,它会展开(将视图的一部分设置为可见),如果它已经展开,则会折叠。一次只展开一项。如果我使用 visibility 来 gone 或 visible 或使用 notifyItemChanged,recyclerview 的项目会折叠或展开,并且在这样做时它们会重叠。我不希望它们在进行 UI 更改时重叠
class RedeemSectionAdapter(
private val redeemData: List<Redeem>,
preExpandedViewPosition: Int = 1
) : RecyclerView.Adapter<RedeemSectionAdapter.RedeemSectionViewHolder>() {
companion object {
var expandedViewPosition = -1
}
init {
expandedViewPosition = preExpandedViewPosition
}
class RedeemSectionViewHolder(
private val binding: GiftCardRedeemSectionBinding
) : RecyclerView.ViewHolder(binding.root) {
fun bind(
position: Int,
redeemSection: Redeem,
onClickCallBack: (index: Int) -> Unit
) {
with(binding) {
stepsRecyclerView.layoutManager = LinearLayoutManager(binding.root.context)
stepsRecyclerView.adapter = RedeemStepsAdapter(redeemSteps = redeemSection.redeemSteps)
sectionListDivider.visibility = if (position == 0) View.INVISIBLE else View.VISIBLE
sectionHeader.text = redeemSection.sectionHeader
val drawIcon =
if (expandedViewPosition == position) R.drawable.ic_up_arrow else R.drawable.ic_down_arrow
sectionHeader.setCompoundDrawablesWithIntrinsicBounds(0, 0, drawIcon, 0)
stepsRecyclerView.visibility = if(position == expandedViewPosition) View.VISIBLE else View.GONE
}
binding.root.setOnClickListener {
if (expandedViewPosition == position) {
expandedViewPosition = -1
} else {
val currentExpandedItemPosition = expandedViewPosition
expandedViewPosition = position
if(currentExpandedItemPosition > -1)
onClickCallBack(currentExpandedItemPosition)
}
onClickCallBack(position)
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RedeemSectionViewHolder {
val binding =
GiftCardRedeemSectionBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return RedeemSectionViewHolder(binding)
}
override fun getItemCount() = redeemData.size
override fun onBindViewHolder(holder: RedeemSectionViewHolder, position: Int) {
holder.bind(position, redeemData[position]) { index: Int ->
notifyItemChanged(index)
}
}
}```