我在应用程序的recyclerView中使用了3个跨度计数的GridLayoutManager,问题是我第一次运行该应用程序时,由于来自服务器的项的限制/分页,它仅显示前10个项,而用户使用{ {1}}或滚动它可以继续加载其他项目,但是第一次加载时看起来很难看,所以我想填补这些空白而无需刷新以加载其他项目
这是带有滚动侦听器的网格布局
SwipeRefreshLayout
SwipeRefreshLayout
gridLayoutManager = new GridLayoutManager(MainActivity.this, 3);
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
isScrolling = true;
progressBar.setVisibility(View.GONE);
}
}
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (dy > 0) {
currentItems = gridLayoutManager.getChildCount();
totalItems = gridLayoutManager.getItemCount();
scrollOutItems = gridLayoutManager.findFirstVisibleItemPosition();
if (isScrolling && (currentItems + scrollOutItems == totalItems)) {
isScrolling = false;
if (getItemsByLabelCalled) {
for (int i = 1; i < 7; i++) {
if (navigationView.getMenu().getItem(i).isChecked()) {
getItemsByLabel(navigationView.getMenu().getItem(i).getTitle().toString());
}
}
} else {
getData();
}
}
}
}
});
图片描述的问题
答案 0 :(得分:1)
问题是您的商品数量不足以填满整个页面。有两种方法可以解决此问题。
您可以在加载第一批之后再调用一次getData
方法,以获取更多数据,这不是一个干净的解决方案,因为您可能需要在平板电脑等较大屏幕上放置更多物品。
将更多加载过程放入回收器视图适配器的onBindViewHolder
方法中,而不是在滚动侦听器中。例如,如果position == getItemCount()-1
如果最后一个项目在视图中(或需要绑定)而请求服务器提供更多项目,则可以做更多的装载。请记住,您必须保留一个布尔值,以防止对getData
进行重复调用。