【问题标题】:Getting Flickering Effect When Showing Horizontal RecyclerView inside Vertical RecyclerView在垂直 RecyclerView 中显示水平 RecyclerView 时获得闪烁效果
【发布时间】:2016-09-14 13:44:52
【问题描述】:

我有一个VerticalRecyclerView,而这个垂直的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 创建了适配器。这样它就不会创建新实例。
  • 我也做了同样的事情,但我的背景变得很不稳定。你介意快速看看我的问题吗? stackoverflow.com/questions/40823501/…

标签: android android-recyclerview horizontal-scrolling flicker linearlayoutmanager


【解决方案1】:

性能很差,因为您将setHasFixedSize(boolean) 设置为true,这将导致每个嵌套的水平RecyclerView 在垂直RecyclerView 可见时加载其所有视图。将固定大小设置为true 通常用于使RecyclerView 包装其内容。但是要包装自己的内容,他必须知道其内容的大小,因此他必须在可见时创建所有视图(知道他的最大高度和宽度)。

优化嵌套RecyclerViews 的最佳方法是不将固定大小设置为true。但这可能会导致嵌套RecyclerViews 无法完全显示,因为它不知道他的高度(因为RecyclerView 中的不同视图可以有不同的高度)。解决此问题的一种方法是使用硬编码的高度或创建自己的 CustomRecyclerView 类来扩展 RecyclerView 并覆盖测量方法。

【讨论】:

  • 不工作,问题是因为在 onBindViewHolder() 中创建了适配器,这就是我需要优化的。
猜你喜欢
  • 1970-01-01
  • 2016-01-20
  • 1970-01-01
  • 2015-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-02
  • 2015-11-30
相关资源
最近更新 更多