在 RecyclerView 的 onClick 中更改项目
Changing Item in onClick of RecyclerView
我有一个显示在 recyclerview 中的联系人列表。单击一个项目后,它的视图会以我想要的方式发生变化,如果我单击另一个项目,则之前选择的项目 returns 回到其原始状态,所以到目前为止一切都很好。但是,当我单击之前已单击的项目并展开时,什么也没有发生。这是我在 onBindViewHolder
中的代码
if(selectedPosition==position){
if(holder.itemView.contactsListOptionsMenu.isVisible){
holder.itemView.contactsListOptionsMenu.visibility = View.GONE
holder.itemView.contactsListCallBtn.visibility = View.GONE
holder.itemView.contactsListDetailsBtn.visibility = View.GONE
holder.itemView.contactFullName.setCompoundDrawablesRelativeWithIntrinsicBounds(0,0,R.drawable.ic_arrow_down_24,0)
} else{
holder.itemView.contactsListOptionsMenu.visibility = View.VISIBLE
holder.itemView.contactsListCallBtn.visibility = View.VISIBLE
holder.itemView.contactsListDetailsBtn.visibility = View.VISIBLE
holder.itemView.contactFullName.setCompoundDrawablesRelativeWithIntrinsicBounds(0,0,R.drawable.ic_arrow_up_24,0)
}
} 否则 {
如果(holder.itemView.contactsListOptionsMenu.isVisible){
holder.itemView.contactsListOptionsMenu.visibility = View.GONE
holder.itemView.contactsListCallBtn.visibility = View.GONE
holder.itemView.contactsListDetailsBtn.visibility = View.GONE
holder.itemView.contactFullName.setCompoundDrawablesRelativeWithIntrinsicBounds(0,0,R.drawable.ic_arrow_down_24,0)
}
}
我需要做什么才能在再次单击时折叠已展开的项目,反之亦然?
在逻辑中使用视图可见性不是一个好主意。您应该使用 selectedPosition
变量来查找当前选择的 ViewHolder。
然后在视图持有者上单击:
如果第一次点击视图持有者,将位置分配给 selectedPosition。
如果视图持有者之前被点击,现在又被点击,则将 -1 分配给所选位置。
调用 notifyDataSetChanged() 更新 UI。
您可以在 onBindViewHolder()
中执行此操作:
holder.itemView.setOnClickListener {
selectedPosition = if (position == selectedPosition) {
-1
} else {
position
}
notifyDataSetChanged()
}
if (selectedPosition == position) {
holder.itemView.contactsListOptionsMenu.visibility = View.VISIBLE
holder.itemView.contactsListCallBtn.visibility = View.VISIBLE
holder.itemView.contactsListDetailsBtn.visibility = View.VISIBLE
holder.itemView.contactFullName.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, R.drawable.ic_arrow_up_24, 0)
} else {
holder.itemView.contactsListOptionsMenu.visibility = View.GONE
holder.itemView.contactsListCallBtn.visibility = View.GONE
holder.itemView.contactsListDetailsBtn.visibility = View.GONE
holder.itemView.contactFullName.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, R.drawable.ic_arrow_down_24, 0)
}
我有一个显示在 recyclerview 中的联系人列表。单击一个项目后,它的视图会以我想要的方式发生变化,如果我单击另一个项目,则之前选择的项目 returns 回到其原始状态,所以到目前为止一切都很好。但是,当我单击之前已单击的项目并展开时,什么也没有发生。这是我在 onBindViewHolder
中的代码if(selectedPosition==position){
if(holder.itemView.contactsListOptionsMenu.isVisible){
holder.itemView.contactsListOptionsMenu.visibility = View.GONE
holder.itemView.contactsListCallBtn.visibility = View.GONE
holder.itemView.contactsListDetailsBtn.visibility = View.GONE
holder.itemView.contactFullName.setCompoundDrawablesRelativeWithIntrinsicBounds(0,0,R.drawable.ic_arrow_down_24,0)
} else{
holder.itemView.contactsListOptionsMenu.visibility = View.VISIBLE
holder.itemView.contactsListCallBtn.visibility = View.VISIBLE
holder.itemView.contactsListDetailsBtn.visibility = View.VISIBLE
holder.itemView.contactFullName.setCompoundDrawablesRelativeWithIntrinsicBounds(0,0,R.drawable.ic_arrow_up_24,0)
}
} 否则 { 如果(holder.itemView.contactsListOptionsMenu.isVisible){
holder.itemView.contactsListOptionsMenu.visibility = View.GONE
holder.itemView.contactsListCallBtn.visibility = View.GONE
holder.itemView.contactsListDetailsBtn.visibility = View.GONE
holder.itemView.contactFullName.setCompoundDrawablesRelativeWithIntrinsicBounds(0,0,R.drawable.ic_arrow_down_24,0)
}
}
我需要做什么才能在再次单击时折叠已展开的项目,反之亦然?
在逻辑中使用视图可见性不是一个好主意。您应该使用 selectedPosition
变量来查找当前选择的 ViewHolder。
然后在视图持有者上单击:
如果第一次点击视图持有者,将位置分配给 selectedPosition。
如果视图持有者之前被点击,现在又被点击,则将 -1 分配给所选位置。
调用 notifyDataSetChanged() 更新 UI。
您可以在 onBindViewHolder()
中执行此操作:
holder.itemView.setOnClickListener {
selectedPosition = if (position == selectedPosition) {
-1
} else {
position
}
notifyDataSetChanged()
}
if (selectedPosition == position) {
holder.itemView.contactsListOptionsMenu.visibility = View.VISIBLE
holder.itemView.contactsListCallBtn.visibility = View.VISIBLE
holder.itemView.contactsListDetailsBtn.visibility = View.VISIBLE
holder.itemView.contactFullName.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, R.drawable.ic_arrow_up_24, 0)
} else {
holder.itemView.contactsListOptionsMenu.visibility = View.GONE
holder.itemView.contactsListCallBtn.visibility = View.GONE
holder.itemView.contactsListDetailsBtn.visibility = View.GONE
holder.itemView.contactFullName.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, R.drawable.ic_arrow_down_24, 0)
}