我有两个问题是由同一个来源引起的。
我正在开发一个社交媒体应用程序,我有一个个人资料 View ,其中包含个人资料图片的 CollapsingToolbarLayout
和 NestedScrollView
中的 RecyclerView
帖子提要。
我没想到的行为是,假设我在 RecyclerView 中有 20 个帖子,屏幕只能显示 3 个,回收器适配器创建了 20 个 View 持有者,它们都被认为是可见的。
这给我带来了两个问题: 1 - 帖子可能包含视频,如果帖子在屏幕上不可见,我希望停止播放视频。我曾经在我的其他 RecyclerView 上这样做。
@Override
public void onViewDetachedFromWindow(@NonNull RecyclerView.ViewHolder holder) {
if (holder instanceof PostViewHolder) {
PostViewHolder postViewHolder = (PostViewHolder) holder;
pauseVideo(postViewHolder.videoPlayer);
}
}
此方法永远不会被调用,因为 RecyclerView 或适配器或任何认为所有 View 持有者在屏幕上可见的东西。为了确保我的假设是正确的,我在 onViewAttachedToWindow
上做了一个日志,如果列表包含 20 个帖子,当我将列表添加到 RecyclerView 时它会被调用 20 次。
2 - 我希望动态加载帖子(在滚动时加载小批量)。这是使用此方法实现的:
WrapContentLinearLayoutManager llManager = new WrapContentLinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(llManager);
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
if(dy > 0) { //check for scroll down
if (llManager.findFirstVisibleItemPosition() + 10 > llManager.getItemCount() && !loadingMorePosts) {
loadingMorePosts = true;
dbListeners.getMoreUserPosts();
}
}
}
});
这也不起作用,因为 llManager.findFirstVisibleItemPosition()
总是返回 0。
我是不是做错了什么,或者这是嵌套 ScrollView 中 RecyclerView 的预期行为? 对于第二个问题是否有解决方案或解决方法,因为一次加载所有帖子是 Not Acceptable 。
谢谢。
最佳答案
您必须在 nessterscroll View 的滚动监听器中处理分页
nestedScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
@Override
public void onScrollChange(NestedScrollView view, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
if (scrollY == (view.getChildAt(0).getMeasuredHeight() - view.getMeasuredHeight())&& !loadingMorePosts) {
loadingMorePosts = true;
dbListeners.getMoreUserPosts();
}
}
});
关于android - 在 NestedScrollView 中创建 RecyclerView ViewHolder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59030449/