RecyclerView滚动条滞后

Posted

技术标签:

【中文标题】RecyclerView滚动条滞后【英文标题】:RecyclerView scrollbar laggy 【发布时间】:2014-10-08 22:18:50 【问题描述】:

当我使用新的回收器视图时,我注意到滚动条不像常规 ScrollView/ListView 那样流畅。当您在适配器项目中滚动时,它看起来似乎无法识别,但它仅在新项目出现/旧项目消失时才会更改,因此进度条会跳转而不是平滑移动。 This is a video 演示了这个问题。 有没有办法让它顺利?

我的布局:

<android.support.v7.widget.RecyclerView
                android:id="@+id/listRecycler"
                android:scrollbars="vertical"
                android:layout_
                android:layout_/>

片段:

    mListRecycler.setAdapter(mAdapter);
    LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
    layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    mListRecycler.setLayoutManager(layoutManager);

适配器:

public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder> 

private List<News> items;
private int itemLayout;

public NewsAdapter(List<News> items, int itemLayout) 
    this.items = items;
    this.itemLayout = itemLayout;


@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 
    View v = LayoutInflater.from(parent.getContext()).inflate(itemLayout, parent, false);
    v.setOnClickListener(this);
    return new ViewHolder(v);


@Override
public void onBindViewHolder(ViewHolder holder, int position) 
    News item = items.get(position);
    holder.text.setText(item.getTitle());
    holder.itemView.setTag(item);



@Override
public int getItemCount() 
    return items.size();


public static class ViewHolder extends RecyclerView.ViewHolder 
    @InjectView(R.id.title)
    TextView text;

    public ViewHolder(View itemView) 
        super(itemView);
        ButterKnife.inject(this, itemView);
    

【问题讨论】:

奇怪的是,您展示的另一个示例也出现了相同的延迟,它只是有更多的项目,请注意当视图离开屏幕时滚动条手柄会如何摆动。 你能用最新版本的 RV 更新线程 + 将平滑滚动条设置为 true 吗? 【参考方案1】:

这是 L 预览版中的问题。 LinearLayoutManager 没有smooth scrollbars support。 将在 RecyclerView 发布时修复。

【讨论】:

21.0.0 仍然会发生这种情况 怎么回事,发布了这么多漏洞的代码。完全不能用【参考方案2】:

RecyclerView 还使用高度(如果方向垂直或宽度如果水平)来计算滚动条的高度(或宽度)。如果您的列表项具有相同的高度(或宽度),请考虑使用 setHasFixedSize()。

mRecyclerList.setHasFixedSize(true);

【讨论】:

以上是关于RecyclerView滚动条滞后的主要内容,如果未能解决你的问题,请参考以下文章

使用 Recycler View 将房间数据库滚动到特定位置

滚动 Recycler View 时有意丢失数据

Recycler 视图中的自动平滑滚动

如何使 Recycler View 表现得像 PlayStore Recycler Views

RecyclerView(滚动控件)的用法

滚动完成前Recyclerview滚动不顺畅