RecyclerView往上滑动翻页时findFirstVisibleItemPosition() 所获取的值为什么不会改变?

ActionWind 初级 2021-01-21 05:15:04

RecyclerView往上滑动翻页的时候,linearLayoutManager.findFirstVisibleItemPosition() 所获取的值为什么不会改变?

往下滑的时候是会改变的,比如从1到9,往上滑就一直停留在9了。(准确的说:它跳到8,然后又马上变成9)

请大家帮我看看:为什么会发生这种情况?代码:

class PdfScrollListener extends RecyclerView.OnScrollListener {
int currentPage = 0;
int lastPage = 0;
PdfActivity pdfActivity;

public PdfScrollListener(PdfActivity pdf) {
pdfActivity = pdf;
}

@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
Log.e("Position","============:"+linearLayoutManager.findFirstVisibleItemPosition());

LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
if (((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstVisibleItemPosition() == -1) {
currentPage = 0;
} else {
currentPage = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstVisibleItemPosition();
}

//再插入之后的两页

if (currentPage > lastPage && currentPage + 2 < pdfActivity.pageCount) {//判断不超过总的页数就提前插入两页
pdfActivity.goDown(currentPage);
recyclerView.getAdapter().notifyItemInserted(currentPage + 2);
pdfActivity.deletePage(currentPage);

}

if (currentPage < lastPage && currentPage - 2 >= 0 && recyclerView.getAdapter().getItemId(currentPage - 2) == recyclerView.NO_ID) {
recyclerView.getAdapter().notifyItemInserted(currentPage - 3);
}
recyclerView.invalidate();
lastPage = currentPage;

}

}
...全文
974 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ActionWind 初级 2021-01-21
  • 打赏
  • 举报
回复
搞定了,是因为recyclerView.getAdapter().notifyItemInserted(currentPage - 3)往前插入item造成的 其实我要的不是插入item,只要修改数据源就可以了。改成用.notifyDataSetChanged()就可以了

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧