Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在NestedScrollView中创建RecyclerView视图持有者_Android_Android Recyclerview_Screen_Nestedscrollview - Fatal编程技术网

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();
            }

        }
    });

是否将包裹内容设置为回收器视图的高度?谢谢,这修复了动态数据加载问题。