在Vertical RecyclerView中显示水平RecyclerView时获得闪烁效果

时间:2016-05-18 07:50:42

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

我有一个Vertical RecyclerView,每个项目的垂直RecyclerView's都包含Horizontal RecyclerView。所以我已经完成了这个并且工作正常,除了性能因素,当我滚动Vertical RecyclerView垂直列表闪烁并给出不良行为。我为Adapter设置RecyclerView在Vertical 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);
}

1 个答案:

答案 0 :(得分:0)

由于您将setHasFixedSize(boolean)设置为true,因此效果不佳,这会导致每个嵌套的水平RecyclerView在垂直RecyclerView中显示时加载其所有视图。将固定大小设置为true非常适合用RecyclerView包装其内容。但是要包装自己的内容,他必须知道其内容的大小,因此他必须在变得可见时创建所有视图(以了解他的最大高度和宽度)。

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