Я использую FlexboxLayoutManager для отображения Recycler Просмотр элементов с динамической шириной. Проблема, с которой я сталкиваюсь, заключается в том, что при изменении фона элемента он реанимирует / перерисовывает все последующие элементы, которые не очень привлекательны / необходимы.
На следующем снимке экрана показан вариант использования. Всякий раз, когда в одной строке находятся два или более элементов с различной шириной, выбор / отмена выбора воссоздает соседей.
Мой код для этого:
val managerVal = FlexboxLayoutManager(context, FlexDirection.ROW)
// I have used these properties as well with other combinations showing here for reference
// managerVal.alignItems = AlignItems.FLEX_START
// managerVal.justifyContent = JustifyContent.CENTER
itemView.rvFilterOptions.layoutManager = managerVal
val filterOptionAdapter = FilterOptionAdapter(
context,
record.values
)
itemView.rvFilterOptions.adapter = filterOptionAdapter
Я также пробовализменение значений в адаптере
val lp = itemView.llFilterValue.getLayoutParams()
if (lp is FlexboxLayoutManager.LayoutParams) {
lp.flexGrow = 1.0f
flexboxLp.flexShrink = 1f
lp.alignSelf = AlignItems.FLEX_START
}
Код для изменения фона элемента в адаптере.
if (record.isSelected) {
itemView.tvFilterValue.setTextColor(
AppCompatResources.getColorStateList(
context,
R.color.textWhite
)
)
itemView.ivFilterCheck.show()
itemView.llFilterValue.background =
AppCompatResources.getDrawable(
context,
R.drawable.bg_dark_rectangle_circle_edge
)
} else {
itemView.tvFilterValue.setTextColor(
AppCompatResources.getColorStateList(
context,
R.color.textNormal
)
)
itemView.ivFilterCheck.invisible()
itemView.llFilterValue.background =
AppCompatResources.getDrawable(
context,
R.drawable.bg_gray_rectangle_circle_edge
)
}
GIF, чтобы показать поведение:
Спасибо за ваше время.