我正在使用FlexboxLayoutManager显示具有动态宽度的 Recycler View 项目。我面临的问题是,当项目的背景发生变化时,它会重新激活/重绘所有不太吸引人/需要的下一个项目。
以下屏幕截图显示了用例。每当单行中有两个或多个不同宽度的项目时,选择/取消选择视图正在重新创建下一个邻居。
我的代码:
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:
感谢您的时间。