Android 在NestedScrollView中创建RecyclerView视图持有者
我有两个问题是由同一个来源引起的。 我正在开发一个社交媒体应用程序,我的个人资料视图包含个人资料图片的Android 在NestedScrollView中创建RecyclerView视图持有者,android,android-recyclerview,screen,nestedscrollview,Android,Android Recyclerview,Screen,Nestedscrollview,我有两个问题是由同一个来源引起的。 我正在开发一个社交媒体应用程序,我的个人资料视图包含个人资料图片的折叠工具栏布局,以及帖子提要的嵌套滚动视图内的回收视图 我没有预料到的行为是,假设我在RecyclerView中有20篇文章,屏幕只能显示3篇,RecyclerAdapter创建了20个视图保持架,它们都被认为是可见的 这给我带来了两个问题: 1-帖子可能包含视频,如果帖子在屏幕上不可见,我希望视频停止。我以前在我的其他RecyclerViews上这样做 @Override public voi
折叠工具栏布局
,以及帖子提要的嵌套滚动视图内的回收视图
我没有预料到的行为是,假设我在RecyclerView中有20篇文章,屏幕只能显示3篇,RecyclerAdapter创建了20个视图保持架,它们都被认为是可见的
这给我带来了两个问题:
1-帖子可能包含视频,如果帖子在屏幕上不可见,我希望视频停止。我以前在我的其他RecyclerViews上这样做
@Override
public void onViewDetachedFromWindow(@NonNull RecyclerView.ViewHolder holder) {
if (holder instanceof PostViewHolder) {
PostViewHolder postViewHolder = (PostViewHolder) holder;
pauseVideo(postViewHolder.videoPlayer);
}
}
从不调用此方法,因为RecyclerView或adapter或其他认为所有视图持有者在屏幕上都可见的东西。为了确保我的假设是正确的,我在ViewAttachedTowindow上做了一个日志,如果列表包含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的预期行为?
第二个问题是否有解决方案或解决方法,因为一次加载所有帖子是不可接受的
谢谢。您必须在nesterscroll 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();
}
}
});
是否将包裹内容设置为回收器视图的高度?谢谢,这修复了动态数据加载问题。