我正在使用回收站视图分页来显示我的数据。默认情况下,我正在加载一页api数据,对于下一页,我将在回收者视图的滚动基础上加载数据。但是滚动并没有被调用,因为我只能看到一页。如果我把条件放在滚动上以增加页面编号。然后在滚动方法上它不会停止及其调用API直到后台的最后一页。滚动上的意思是一遍又一遍我不想要的电话。我想在当前可见项目的基础上滚动。
div
答案 0 :(得分:1)
尝试此代码。
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定义并绑定适配器之后使用。
GridLayoutManger ..
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);
}
}
};