android - 在 NestedScrollView 中创建 RecyclerView ViewHolder

标签 android android-recyclerview screen nestedscrollview

我有两个问题是由同一个来源引起的。 我正在开发一个社交媒体应用程序,我有一个个人资料 View ,其中包含个人资料图片的 CollapsingToolbarLayoutNestedScrollView 中的 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/

相关文章:

c# - 基本 Xamarin.iOS 屏幕操作

android - 在 Android 上使用 AudioRecord 录制可以加快音频速度?

android - --prod 标志导致在 Android 7 的 Ionic 3 应用程序中不显示键盘

android - 电子邮件链接在 Android 上不起作用

android - BottomSheet 与 RecyclerView 和其他 View

java - 为什么在构造函数中赋值时,clone()函数显示不兼容的类型?

android - 无法使用回收器 View 滚动数据

获取屏幕分辨率大小的android问题

C - 函数仅在循环至少 17 次时才工作

java - Android ObjectAnimator 如何识别属性设置方法?