Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-recyclerView.addOnScrollListener触发recyclerView中的最后一项_Java_Android_Android Recyclerview - Fatal编程技术网

Java Android-recyclerView.addOnScrollListener触发recyclerView中的最后一项

Java Android-recyclerView.addOnScrollListener触发recyclerView中的最后一项,java,android,android-recyclerview,Java,Android,Android Recyclerview,我已经编写了一段代码,其中我使用youtube数据api获取数据,现在我想使用nextPageTolen填充记录,因为我的JSON中大约有5000条记录。 这是我用来填充到RecyclerView中的代码 我的问题是,当我运行应用程序并滚动到底部时,它会加载下一页并触发下一页的最后一项,然后它不会超出第二页并显示 Toast.makeText(getActivity(), "totalItemCount < pastVisiblesItems", Toast.LENGTH_SHOR

我已经编写了一段代码,其中我使用youtube数据api获取数据,现在我想使用nextPageTolen填充记录,因为我的JSON中大约有5000条记录。 这是我用来填充到RecyclerView中的代码

我的问题是,当我运行应用程序并滚动到底部时,它会加载下一页并触发下一页的最后一项,然后它不会超出第二页并显示

    Toast.makeText(getActivity(), "totalItemCount < pastVisiblesItems", Toast.LENGTH_SHORT).show();  
Toast.makeText(getActivity(),“totalItemCount
祝酒词持续不断
有人能指导我在哪里修改代码吗

每当用户滚动到底部时,我想填充更多记录

        private boolean loading = true;
        private int pastVisiblesItems = 0;
        int visibleItemCount, totalItemCount, firstVisiblesItem;


        listVideos.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            visibleItemCount = listVideos.getChildCount();
            totalItemCount = linearLayoutManager.getItemCount();
            firstVisiblesItem = linearLayoutManager.findFirstVisibleItemPosition();
            int lastVisibleItemCount = linearLayoutManager.findLastVisibleItemPosition();

            if (loading) {
                Log.v("...", "totalItemCount < pastVisiblesItems");

                **Toast.makeText(getActivity(), "totalItemCount < pastVisiblesItems", Toast.LENGTH_SHORT).show();**

                if (totalItemCount > pastVisiblesItems) {
                    loading = false;
                    pastVisiblesItems = totalItemCount;
                }
            }

            if (!loading){
                if (totalItemCount > 0){
                    if ((totalItemCount - 1) == lastVisibleItemCount){
                        Log.v("...", "Last Item Wow !");
                        Toast.makeText(getActivity(), "Last Item", Toast.LENGTH_SHORT).show();
                        loadMoreVideos lMVideos = new loadMoreVideos();
                        lMVideos.execute();
                        loading = true;
                    }
                }
                else {
                    Log.v("...", "loading = true");
                    Toast.makeText(getActivity(), "loading = true", Toast.LENGTH_SHORT).show();
                }
            }
        }
    });
私有布尔加载=true;
私有int pastVisiblesItems=0;
int visibleItemCount、totalItemCount、firstVisiblesItem;
listVideos.addOnScrollListener(新的RecyclerView.OnScrollListener(){
@凌驾
已填空的公共空间(RecyclerView RecyclerView、int dx、int dy){
super.onScrolled(recyclerView、dx、dy);
visibleItemCount=listVideos.getChildCount();
totalItemCount=linearLayoutManager.getItemCount();
firstVisiblesItem=linearLayoutManager.findFirstVisibleItemPosition();
int lastVisibleItemCount=linearLayoutManager.findLastVisibleItemPosition();
如果(装载){
Log.v(“…”,“totalItemCountpastVisiblesItems){
加载=假;
pastVisiblesItems=totalItemCount;
}
}
如果(!加载){
如果(totalItemCount>0){
如果((totalItemCount-1)=lastVisibleItemCount){
Log.v(“…”,“最后一项哇!”);
Toast.makeText(getActivity(),“最后一项”,Toast.LENGTH_SHORT.show();
loadMoreVideos lMVideos=新建loadMoreVideos();
lMVideos.execute();
加载=真;
}
}
否则{
Log.v(“…”,“load=true”);
Toast.makeText(getActivity(),“load=true”,Toast.LENGTH_SHORT.show();
}
}
}
});

这就是我如何得到这个问题的答案,我为那些有相同问题的人发布了这个答案

如果您使用的是LinearLayoutManager或StaggedGridLayoutManager,则它们都有一个scrollToPositionWithOffset方法,该方法同时获取项目开始位置和从RecyclerView开始的偏移量,这似乎可以满足您的需要(将偏移量设置为0应与顶部对齐)

例如:

    //Scroll item 2 to 20 pixels from the top
    linearLayoutManager.scrollToPositionWithOffset(2, 20);

这对我有用。。。现在,每次加载新页面时,它都会触发第一项…

当loadMoreVideos任务完成时,您必须设置
loading=false。。希望你正在做这件事…耶,我已经设置了加载=错误;但当第2页加载时,它会直接触发第2页中的第10项。它会触发第2页中的第1项,当我向下滚动到第10项时,它会加载3d页并触发第3页中的第1项