我正在使用RecyclerView在我的应用程序中显示产品列表,我需要根据过道对产品进行分组。在列表中首次获取数据时,产品会根据过道正确分组。当我们滚动视图时,将为错误的项目显示过道组分隔线,并且一旦onBindViewHolder自动刷新,分隔线就会恢复到正确的位置。
MyAdapter.class
override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
itemsGrouping(pickItem, pickItemView, holder.adapterPosition)
}
private fun itemsGrouping(pickItem: PickItem, pickItemView: View, adapterPosition: Int) {
//Based on some condition
if(SomeCondition)
itemDivider(pickItemView,true)
else
itemDivider(pickItemView,false)
}
private fun itemDivider(v: View, boolean: Boolean) {
if(boolean) {
v.visibility = View.VISIBLE
} else {
v.visibility = View.GONE
}
}
答案 0 :(得分:0)
好吧,您应该知道视图持有者已在RecyclerView中重用,因此尝试确定onBindViewHolder中分隔线的可见性可能不是正确的主意。我建议将项目装饰器用于分隔线。这是该问题和答案 How to add dividers and spaces between items in RecyclerView?
答案 1 :(得分:0)
问题是RecyclerView会回收以前的视图以提高效率。 我猜“ SomeCondition”中包含了先前持有人的文物。
所以
itemsGrouping(pickItem, pickItemView, holder.adapterPosition)
您应该从新绑定的持有人那里获得pickItem和pickItemView。您应该使用
pickItemView = holder.findViewById(R.id.pickItemView);
或考虑使用DataBinding Library
这是一个很好的例子(在Kotlin中):DataBoundListAdapter
一旦将适配器扩展到DataBoundListAdapter并覆盖bind()方法,bind内的所有内容都将针对每一行执行,因此不会得到重复的结果。
注意:注意“ executePendingBindings()”