android - 滚动时加载 RecyclerView 元素

标签 android infinite-scroll android-recyclerview

我在 SwipeRefreshLayout 中有一个 RecyclerView,因此在刷新 RecyclerView 时会重置。但是,一旦我到达 RecyclerView 的底部或过度滚动它,我想向其中添加更多项目。

到目前为止我的尝试:

我已经将 RecyclerView 子类化,以便在到达底部时实现添加元素,就像这样(在 OnScrollListener 内部):

LinearLayoutManager manager = (LinearLayoutManager) getLayoutManager();
mVisible = manager.getChildCount();
mTotal = manager.getItemCount();
mPastVisible = manager.findFirstVisibleItemPosition();
if (!loading)
{
    if (manager.findLastCompletelyVisibleItemPosition() ==
        manager.getItemCount() - 1)
        {
            loading = true;
            loadNext();
        }
}

loadNext() 是一个异步请求,它在完成时将 loading bool 值设置为 false,并像这样设置适配器:

MyAdapter adapter = new MyAdapter(items, ctx);
setAdapter(adapter);
scrollToPosition(mTotal - 1);
loading = false;

项目加载正确,但是 scrollToPosition(mTotal - 1); 使最后一个项目成为顶部的第一个,而新的项目被添加到底部,也是因为 View 来了在动画中,旧 View 有时会在背景/前景中绘制,而新 View 会滑过它们。有什么方法可以更好地实现这一点?

最佳答案

你可以试试这个:

private RecyclerView.OnScrollListener scrollListener = new RecyclerView.OnScrollListener() {
    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);
        int visibleCount = manager.getChildCount();
        int totalCount = manager.getItemCount();
        int firstVisibleCount = manager.findFirstVisibleItemPosition();

        if (loading && totalCount > previousTotalCount){
            loading = false;
            previousTotalCount = totalCount;
        }

        if (!loading && totalCount - visibleCount <= firstVisibleCount + 5){
            loading = true;
            loadNext();
        }
    }
};

而且您不需要调用scrollToPosition()

关于android - 滚动时加载 RecyclerView 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30526509/

相关文章:

android - AlertDialog setCustomTitle 样式以匹配标准 AlertDialog 标题

Android 将 findViewById 的上下文从内联类更改为 super

python-3.x - 如何向下滚动到页面底部(无限滚动,pinterest)

android - 滑动后如何恢复回收者 View 项目

机器人 : change layout screen in runtime

Java将时间戳对象转换为日期格式

java - 我如何在 Kotlin 中使用非静态方法?

php - 如何对 Infinite Scroll 的查询结果进行分页?

audio - Tumblr音频帖子不适用于无限滚动

android - 使用 LinearLayoutManager 在 RecyclerView 中滚动到顶部