Android 水平 Recyclerview 滚动显示多个 select
Android Horizontal Recyclerview Shows multiple select on scroll
我需要 select 第一个项目作为默认 selection 和 select 单击单个项目。但是当我滚动并看到它时,我可以看到它 select 每 8 次 item.it 甚至包括多个项目的 margin-left,我只包括水平 recyclerview 中的第一个项目。
companion object {
private var lastCheckedtab: ConstraintLayout? = null
}
fun bind(
context: Context?,
name: String,
position: Int
) {
if (position == 0) {
cardView?.isSelected = true
cardView?.isClickable = false
lastCheckedtab = cardView
val p = cardView?.layoutParams as ViewGroup.MarginLayoutParams?
p?.leftMargin = 52
}
itemView.setOnClickListener{
val checkedTab = it as ConstraintLayout
checkedTab.isSelected = true
checkedTab.isClickable = false
if (lastCheckedtab != null && lastCheckedtab != checkedTab) {
lastCheckedtab?.isSelected = false
lastCheckedtab?.isClickable = true
context?.let { it1 ->
checkedTab.findViewById<TextView>(R.id.iv_tab_name).setTextColor(
ContextCompat.getColor(
it1,
R.color.black
)
)
lastCheckedtab?.findViewById<TextView>(R.id.iv_tab_name)?.setTextColor(
ContextCompat.getColor(
it1,
R.color.setting_text
)
)
}
}
lastCheckedtab = checkedTab
}
}
override fun onBindViewHolder(holder: MyHolder, position: Int) {
holder.bind(context, tabs.get(position), position)
}
那是因为您select编辑了第一个 ViewHolder,但从未取消select编辑它。
RecyclerView(顾名思义)回收 ViewHolders 而不是总是制造新的。
如果您只想 select 第一个项目,那么您应该进行某种状态保存,以了解 select 编辑了哪些项目,并让该状态从第一个项目开始作为 selected.
然后当你绑定 ViewHolder 时,检查位置是否 selected 或 not
我需要 select 第一个项目作为默认 selection 和 select 单击单个项目。但是当我滚动并看到它时,我可以看到它 select 每 8 次 item.it 甚至包括多个项目的 margin-left,我只包括水平 recyclerview 中的第一个项目。
companion object {
private var lastCheckedtab: ConstraintLayout? = null
}
fun bind(
context: Context?,
name: String,
position: Int
) {
if (position == 0) {
cardView?.isSelected = true
cardView?.isClickable = false
lastCheckedtab = cardView
val p = cardView?.layoutParams as ViewGroup.MarginLayoutParams?
p?.leftMargin = 52
}
itemView.setOnClickListener{
val checkedTab = it as ConstraintLayout
checkedTab.isSelected = true
checkedTab.isClickable = false
if (lastCheckedtab != null && lastCheckedtab != checkedTab) {
lastCheckedtab?.isSelected = false
lastCheckedtab?.isClickable = true
context?.let { it1 ->
checkedTab.findViewById<TextView>(R.id.iv_tab_name).setTextColor(
ContextCompat.getColor(
it1,
R.color.black
)
)
lastCheckedtab?.findViewById<TextView>(R.id.iv_tab_name)?.setTextColor(
ContextCompat.getColor(
it1,
R.color.setting_text
)
)
}
}
lastCheckedtab = checkedTab
}
}
override fun onBindViewHolder(holder: MyHolder, position: Int) {
holder.bind(context, tabs.get(position), position)
}
那是因为您select编辑了第一个 ViewHolder,但从未取消select编辑它。
RecyclerView(顾名思义)回收 ViewHolders 而不是总是制造新的。
如果您只想 select 第一个项目,那么您应该进行某种状态保存,以了解 select 编辑了哪些项目,并让该状态从第一个项目开始作为 selected.
然后当你绑定 ViewHolder 时,检查位置是否 selected 或 not