Android FlexboxLayoutManager воссоздание предметов - PullRequest
0 голосов
/ 21 октября 2019

Я использую FlexboxLayoutManager для отображения Recycler Просмотр элементов с динамической шириной. Проблема, с которой я сталкиваюсь, заключается в том, что при изменении фона элемента он реанимирует / перерисовывает все последующие элементы, которые не очень привлекательны / необходимы.

Screenshot of my Screen

На следующем снимке экрана показан вариант использования. Всякий раз, когда в одной строке находятся два или более элементов с различной шириной, выбор / отмена выбора воссоздает соседей.

Мой код для этого:

 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, чтобы показать поведение:

enter image description here

Спасибо за ваше время.

...