android - recyclerview 和分页滚动问题
问题描述
我正在使用回收站视图分页来显示我的数据。默认情况下,我正在加载一页 api 数据,对于下一页,我正在基于回收器视图的滚动加载数据。但是滚动没有被调用,因为我只能看到 1 页。如果我将条件放在滚动以增加页码。然后在滚动方法上它不会停止并且它调用 api 直到后台的最后一页。滚动的含义是一次又一次地调用我不想要的。我想根据当前可见项目滚动。
live_grid.addOnScrollListener(new PaginationScrollListener(gridLayoutManager) {
@Override
protected void loadMoreItems() {
// TODO: 07/11/16 check if totalPage > 1 before triggering next load
Log.d(TAG, "live_grid loadMoreItems.......");
int visibleItemCount = gridLayoutManager.getChildCount();
int totalItemCount = gridLayoutManager.getItemCount();
int firstVisibleItemPosition = gridLayoutManager.findFirstVisibleItemPosition();
Log.d(TAG, "visibleItemCount: "+ visibleItemCount);
Log.d(TAG, "totalItemCount: "+totalItemCount);
Log.d(TAG, "firstVisibleItemPosition: "+firstVisibleItemPosition);
Log.d(TAG, "currentPage: "+currentPage);
Log.d(TAG, "PAGE_SIZE: "+PAGE_SIZE);
if (!isLoading && !isLastPage) {
// if ((visibleItemCount + firstVisibleItemPosition) >= totalItemCount && firstVisibleItemPosition >= 0) {
if ((visibleItemCount + firstVisibleItemPosition) >= totalItemCount && firstVisibleItemPosition >= 0 && currentPage < (PAGE_SIZE)) {
//&& totalItemCount >= PAGE_SIZE
firstVisibleItemPosition = visibleItemCount;
loadMoreItems1();
}
}
// presenter.setIsLoading(true);
// presenter.setCurrentPage(presenter.getCurrentPage() + 1);
// presenter.loadNextPlaylist();
}
解决方案
试试这个代码..
protected int pastVisibleItems, visibleItemCount, totalItemCount; // define class level..
protected void addScrollListener() {
rvData.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
if (dy > 0) //check for scroll down
{
visibleItemCount = linearLayoutManager.getChildCount();
totalItemCount = linearLayoutManager.getItemCount();
pastVisibleItems = linearLayoutManager.findFirstVisibleItemPosition();
if ((visibleItemCount + pastVisibleItems) >= totalItemCount) {
pageNumber++; // increase your page
getMessage(); // call api with new Page.
}
}
}
});
}
此方法在 recyclerview 定义和绑定适配器后使用。
网格布局管理器..
RecyclerView.OnScrollListener scrollListener = new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
int totalItrem = mLlManager.getItemCount();
int lastViisble = mLlManager.findLastVisibleItemPosition();
Log.d("item", "total item" + totalItrem);
Log.d("visible", "last " + lastViisble);
if (!isLoading && totalItrem == lastViisble + 1 && total_records != mEventList.size()) {
Log.e("msg", "reached end");
//Toast.makeText(mrecyclerview.getContext(), "reached at end", Toast.LENGTH_SHORT).show();
isLoading = true;
mEventList.add(null);
mCurrentPage++;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
getData(mCurrentPage);
}
}, 2000);
}
}
};
推荐阅读
- javascript - 为客户端和 node.js 发布一个库
- php - Heroku PHP 应用程序在本地工作,如果我推送供应商目录,则在部署时工作,但如果我不推送供应商目录,则不会
- mysql - mysql,计算两个表之间的不同值(V2)
- r - 以矢量化方式按位置排列的矢量子集列表
- powershell - 通过 PowerCLI 获取 VM 完整文件夹路径列表
- apache-spark - 如何在 Spark 2.3.0 中减去两个保持重复的 DataFrame
- r - (在R中)如何在保留缩写的同时将“WeLiveInCA”等字符串中的标题大小写拆分为“We Live In CA”?
- reactjs - 传递状态时 Apollo Query 变量错误
- java - 尝试运行 Google Speech Recognition java 示例时出现“需要 query.json 的路径”错误
- twilio - 记录 Twilio Autopilot 对话