Я думаю, я знаю, что может помочь вам исправить это.Я предполагаю, что он повторно использует старое представление, как RecyclerView
, и нигде в вашем коде нет строки, чтобы установить видимость строк connector
обратно в видимое.
Вы должны добавить в обе ваши GONE
видимости также и код, чтобы установить другой видимость:
if (position % 2 == 0) {
holder.itemView.findViewById<ImageView>(R.id.citation_select_connector_right).visibility = View.VISIBLE
holder.itemView.findViewById<ImageView>(R.id.citation_select_connector_left).visibility = View.GONE
val marginLayoutParams1 = holder.citationHolder.layoutParams as GridLayoutManager.LayoutParams
marginLayoutParams1.setMargins(0, 12, 12, 12)
holder.itemView.findViewById<LinearLayout>(R.id.citation_select_holder).layoutParams =
marginLayoutParams1
} else {
holder.itemView.findViewById<ImageView>(R.id.citation_select_connector_left).visibility = View.VISIBLE
holder.itemView.findViewById<ImageView>(R.id.citation_select_connector_right).visibility = View.GONE
val marginLayoutParams2 = holder.citationHolder.layoutParams as GridLayoutManager.LayoutParams
marginLayoutParams2.setMargins(12, 12, 0, 12)
holder.itemView.findViewById<LinearLayout>(R.id.citation_select_holder).layoutParams =
marginLayoutParams2
}
Дополнительное объяснение
RecyclerView
будет использовать некоторыестарый взгляд, верно?Хорошо, так как обе строки VISIBLE
в начале, вы предполагаете, что это их состояние по умолчанию.Но когда вы устанавливаете линии на GONE
, вы никогда не возвращаете их обратно видимым, и, таким образом, если RecyclerView
повторно использует это представление, это не добавит поля там, и просто пропустит соединительную линию.Вы всегда хотите иметь КАЖДУЮ строку кода в onBindViewHolder
, чтобы иметь совпадающую строку, которая обращает ее.