1

我有一个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);
}
4

1 回答 1

0

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

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

于 2016-05-18T09:23:34.483 回答