关于RecyclerView在RecyclerView中有一些主题,但我发现其中大多数主题都不适合我的情况。我的例子是我有一个RecyclerView (垂直线性布局管理)显示一个CardView列表,每个Cardview视图包含一个内部RecyclerView (水平线性布局管理)。问题在于滚动时的性能,根本不是一帆风顺。我注意到,如果我评论内部回收视图的setAdapter,滚动变得平滑,但我使CardView没有更新新的列表。代码类似于以下内容:
onBindViewHolder...{
holder.innerRecycler.setAdapter(new InnerAdapter((data));
// comment that line make the outer recyclerview smoothly but the CardView data not updated thanks to the view recycling.
}我知道滚动视图中的滚动视图不是一个好主意,但我没有看到任何其他选择。以前有人面对过这种布局吗?谢谢。
更新(添加更多代码)。
// init outer recyclerview
mOuterRecyclerView = (RecyclerView) findViewById(...);
mOuterRecyclerView.setLayoutManagement(new LinearLayoutManagement(this));
mOuterRecyclerView.setHasFixedSize(true);
mOuterRecyclerView.setAdapter(new OuterAdapter(dataList));
// The adapter class for the outer one
onBindViewHolder(...){
final dataItem = mItems.get(position);
holder.innerRecycler.setAdapter(new InnerAdapter(dataItem.getList()));
}
// the holder for the outer
class MyHolder extends ViewHolder{
RecyclerView innerRecycler;
public MyHolder(View view){
super(..);
innerRecycler = findViewById(...);
}
}
// the adapter for the inner
onBindViewHolder(...){
final dataItem = mItems.get(pos);
// async loading
holder.tvTitle.setText(dataItem.getTitle);
}布局非常简单,所以我不会在这里发布完整的代码。:)
发布于 2015-10-19 16:52:58
这种方法没有问题,只要它们沿着不同的axes.You滚动,就可以启用RecyclerView.startNestedScroll(int),并且处理像overscroll.This延迟这样的情况,因为您每次都要重新启动一个adpater。您可以尝试一些不同的方法,比如维护一个adpaters地图,并在RecyclerView.swapAdapter(args.)中调用bindVH。
另一个好的步骤也可能是使用RecyclerView.setRecycledViewPool(args.)为回收视图使用公共池。我已经创建和使用了一个清单的100+加上物品与嵌套(不同的轴)回收,并没有遇到问题。
如果您提供更多的代码(在您编写了async loading的地方),我可以帮助您more.But,我建议您通过more.But和设计模式来解决您的问题。
发布于 2017-08-07 12:49:20
@保罗,我也有同样的要求,下面的技巧奏效了。将家长回收视图放在NestedScrollView中,并在您的onCreate方法中设置。
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setNestedScrollingEnabled(false);这防止了家长回收视图卷轴和卷轴变得绝对平滑。
发布于 2016-02-29 06:59:05
因为有一些用户问我如何存档,所以我将发布我所做的事情。@Droidekas这个词似乎是个不错的观点,但我不明白。
我所做的是:
垂直重排器适配器结构可以是:
Vertical Item view holder -> Vertical Item[Name, List<Horizontal item>,...]
Vertical Item view holder -> Vertical Item[Name, List<Horizontal item>,...]在OnBindViewHolder中
holder.setData(VerticalItem)在Holder中,我有一个setData方法,如下所示:
setData(VerticalItem item){
mItems = item.getHorizontalItems();
mHorizontalAdapter.notifyDataSetChanged();
}希望能帮上忙。:D
https://stackoverflow.com/questions/33218397
复制相似问题