我如何创建无尽的两侧滚动RecyclerView?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我如何创建无尽的两侧滚动RecyclerView?相关的知识,希望对你有一定的参考价值。
我看到了this的问题。这个问题的答案是可行的。但是......我必须向两边创建滚动。这个答案帮助我达到了最低点,但是当我到达列表顶部时,我不知道如何发送请求。我尝试使用这样的smth:
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
if(dy > 0) //check for scroll down
{
}
}
});
并添加了这个:
if(dy == 0)
{
getting some data
}
但它的工作原理错误。为什么?因为在到达列表底部后加载一些数据后,我的列表会自动到达列表的顶部并再次加载数据。所以我必须再增加一个条件,但我无法想象哪一个。也许有人可以帮助我?
UPDATE
我试着像这样添加smth:
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
if (dy > 0) //check for scroll down
{
pastVisiblesItems = layoutManager.findFirstVisibleItemPosition();
if (loading) {
loading = false;
}
}
if(pastVisiblesItems==5){
loading=true;
}
if (loading&&recyclerView.canScrollVertically(-1)){
if (prev_url != null) {
Log.i("m","[]");
}
}
}
});
但这个条件:
if (loading&&recyclerView.canScrollVertically(-1)){
if (prev_url != null) {
Log.i("m","[]");
}
}
将发送~30个请求,这对我来说是错误的:(
答案
您可以尝试反转条件,以便在滚动侦听器中达到顶部,如下所示:
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
if(dy > 0) //check for scroll down
{
visibleItemCount = mLayoutManager.getChildCount();
totalItemCount = mLayoutManager.getItemCount();
pastVisiblesItems = mLayoutManager.findFirstVisibleItemPosition();
if (loading)
{
if ( (visibleItemCount + pastVisiblesItems) >= totalItemCount)
{
loading = false;
Log.v("...", "Last Item Wow !");
//Do pagination.. i.e. fetch new data
}
}
}
if(dy < 0) //check for scroll up
{
visibleItemCount = mLayoutManager.getChildCount();
pastVisiblesItems = mLayoutManager.findLastVisibleItemPosition();
if (loading)
{
if ( (pastVisiblesItems - visibleItemCount) <= 0)
{
loading = false;
Log.v("...", "First Item Wow !");
//Do pagination.. i.e. fetch new data
}
}
}
}
});
另一答案
试试这个解决方案方法loadMorePosts();仅当用户无法再垂直滚动时才会调用。
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
Boolean reachedBottom = !recyclerView.canScrollVertically(1);
if (reachedBottom) {
loadMorePosts();
}
}
});
})
创建方法loadMorePosts();在哪里查询下一个数据。或者,您将不得不查看新的分页库。 Documentation here.
以上是关于我如何创建无尽的两侧滚动RecyclerView?的主要内容,如果未能解决你的问题,请参考以下文章
无尽的recyclerview,多种视图类型,OnscrollListener 后崩溃