NestedScrollView内部的RecyclerView ViewHolder创建

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NestedScrollView内部的RecyclerView ViewHolder创建相关的知识,希望对你有一定的参考价值。

我有两个由同一来源引起的问题。我正在使用一个社交媒体应用程序,我的个人资料视图包含个人资料图片的CollapsingToolbarLayout和帖子供稿的RecyclerView内的NestedScrollView

我没想到的行为是,我在RecyclerView中有20个帖子,并且屏幕只能显示3个帖子,Recycler适配器创建20个视图支架,它们都被视为可见。

这给我造成两个问题:1-帖子可能包含视频,如果该帖子在屏幕上不可见,我希望停止播放视频。我曾经在其他RecyclerViews上执行过此操作。

@Override
public void onViewDetachedFromWindow(@NonNull RecyclerView.ViewHolder holder) 
    if (holder instanceof PostViewHolder) 
        PostViewHolder postViewHolder = (PostViewHolder) holder;
        pauseVideo(postViewHolder.videoPlayer);
    

永远不会调用此方法,因为RecyclerView或适配器或任何认为所有视图持有者在屏幕上可见的方法。为确保我的假设正确,我登录了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的预期行为?还有第二个问题的解决方案或解决方法,因为一次加载所有帖子是不可接受的。

和谢谢。

答案

您必须在nesterscroll视图的滚动侦听器中处理分页

以上是关于NestedScrollView内部的RecyclerView ViewHolder创建的主要内容,如果未能解决你的问题,请参考以下文章

NestedScrollView内部的RecyclerView ViewHolder创建

NestedScrollView使用和理解

NestedScrollView顶部滑动

如何在CollapsingToolbar中使用Map的点击事件

Android Kotlin:null 不能转换为非 null 类型 com.android.app.ui.category.CategoryAdapter.ViewHolder 想要在 recycl

当在nestedscrollview的recyclerview中将项目拖出可见空间时-nestedscrollView不滚动