[英]Android getAdapterPosition returns always getItemCount
我正在尝试开发一个 recyclerview,它需要在用户向下滚动时加载新元素(新闻提要的回收器)。 问题是,无论我尝试什么方法,我的适配器都会看到来自回收站的可见项目与 getItemCount 相同。 我尝试的一种方法是在适配器中覆盖 class :
@Override
public void onViewAttachedToWindow(@NonNull ViewHolder holder) {
super.onViewAttachedToWindow(holder);
if((getItemCount() -1) == holder.getAdapterPosition()){
Log.e("TAGNews", "List Done!");
}
}
或者,在我的片段中实现的另一种方法:
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
int visibleItemCount = manager.getChildCount();
int totalItemCount = manager.getItemCount();
int firstVisibleItem = manager.findFirstVisibleItemPosition();
if (loading) {
if (totalItemCount > previousTotal) {
loading = false;
previousTotal = totalItemCount;
}
}
if (!loading && (totalItemCount - visibleItemCount)
<= (firstVisibleItem + visibleThreshold)) {
// End has been reached
Log.e("News!", "end called");
loadMoreNews();
loading = true;
}
}
});
但总是,我的调试消息必须在回收器结束时触发,在回收器打开时触发。 这是我的回收站第一次打开时的样子,没有任何滚动
我从后端加载了 3 到 10 个项目,并且新闻具有相似的高度。
谢谢指教!
请将您的第二个代码更改为:
int lastCompletelyVisibleItemPosition;
recycler.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
lastCompletelyVisibleItemPosition = ((LinearLayoutManager) binding.recycler.getLayoutManager()).findLastVisibleItemPosition();
if (dy > 5)
if (lastCompletelyVisibleItemPosition == models.size() - 1) {
loadMoreData();
}
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.