在垂直 RecyclerView 中显示水平 RecyclerView 时获得闪烁效果
Posted
技术标签:
【中文标题】在垂直 RecyclerView 中显示水平 RecyclerView 时获得闪烁效果【英文标题】:Getting Flickering Effect When Showing Horizontal RecyclerView inside Vertical RecyclerView 【发布时间】:2016-09-14 13:44:52 【问题描述】:我有一个Vertical
RecyclerView
,而这个垂直的RecyclerView's
每一项都包含Horizontal RecyclerView
。所以除了性能因素外,我已经完成了这项工作并且工作正常,当我滚动Vertical RecyclerView
时,垂直列表会闪烁并给出不良行为。我将Adapter
设置为水平RecyclerView
在垂直RecyclerView
内,所以每次滚动我都在创建一个新的适配器并设置数据,实际上这会导致性能。有什么办法可以优化吗?
代码
onBindViewHolder()
setHorizontalList(items, horizontalolder);
setHorizontalList(ArrayList<Item> items, HorizontalHolder holder)
MyAdapter adapter = new MyAdapter();
adapter.setData(items);
holder.recyclerView.setAdapter(adapter);
holder.recyclerView.setLayoutManager(new LinearLayoutManager(mContext,
LinearLayoutManager.HORIZONTAL, false));
holder.recyclerView.setHasFixedSize(true);
【问题讨论】:
您找到解决方案了吗?我已经看到了类似的问题,我的内部项目背景不正确 wrap_content 应该是。 是的。我为 ViewHolder 类中的第二个 RecyclerView 创建了适配器。这样它就不会创建新实例。 我也做了同样的事情,但我的背景变得很不稳定。你介意快速看看我的问题吗? ***.com/questions/40823501/… 【参考方案1】:性能很差,因为您将setHasFixedSize(boolean)
设置为true
,这将导致每个嵌套的水平RecyclerView
在垂直RecyclerView
可见时加载其所有视图。将固定大小设置为true
通常用于使RecyclerView
包装其内容。但是要包装自己的内容,他必须知道其内容的大小,因此他必须在可见时创建所有视图(知道他的最大高度和宽度)。
优化嵌套RecyclerView
s 的最佳方法是不将固定大小设置为true
。但这可能会导致嵌套RecyclerView
s 无法完全显示,因为它不知道他的高度(因为RecyclerView
中的不同视图可以有不同的高度)。解决此问题的一种方法是使用硬编码的高度或创建自己的 CustomRecyclerView
类来扩展 RecyclerView
并覆盖测量方法。
【讨论】:
不工作,问题是因为在 onBindViewHolder() 中创建了适配器,这就是我需要优化的。以上是关于在垂直 RecyclerView 中显示水平 RecyclerView 时获得闪烁效果的主要内容,如果未能解决你的问题,请参考以下文章
在垂直 recyclerView 中带有 wrap_content 的水平 recyclerView
java 自动为RecyclerView项添加相等的间距。可以处理水平,垂直和网格显示模式
java 自动为RecyclerView项添加相等的间距。可以处理水平,垂直和网格显示模式
在水平和垂直的recyclerview中膨胀布局,具有recycler视图的FlexboxLayout添加视图水平自动垂直