我有一个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);
}
答案 0 :(得分:0)
由于您将setHasFixedSize(boolean)
设置为true
,因此效果不佳,这会导致每个嵌套的水平RecyclerView
在垂直RecyclerView
中显示时加载其所有视图。将固定大小设置为true
非常适合用RecyclerView
包装其内容。但是要包装自己的内容,他必须知道其内容的大小,因此他必须在变得可见时创建所有视图(以了解他的最大高度和宽度)。
优化嵌套RecyclerView
的最佳方法是不将固定大小设置为true
。但这可能会导致嵌套RecyclerView
无法完全显示,因为它不知道他的身高(因为RecyclerView
中的不同观点可以有不同的高度)。解决此问题的一种方法是使用硬编码高度或创建扩展CustomRecyclerView
的自己的RecyclerView
类并覆盖测量方法。