首页 > 解决方案 > 当它可见时如何在recyclerview中播放视频并在它不可见时立即暂停(滚动)

问题描述

我有一个像facebook一样的异构recyclerview(文本,图像,视频),我已经实现了用于在其中播放视频的exoplayer,它工作正常但是当我滚动播放视频时出现问题,因为它的视频不可见但它的音频继续播放直到完成。我具有与 android 文档(ViewholderClass、adapterclass 和 ActivityClass)建议的相同的 recyclerview 结构... 主类:从 firebase 获取内容,Viewholder 类:检查帖子类型并相应地显示,适配器类:通常的方法绑定数据,简而言之,viewholder 的问题是没有可用的生命周期方法,我无法在适配器类中获取对象引用以将其暂停在 onDetachedFromRecyclerView() 中。我尝试了所有的 stackoverflow 答案,但没有任何效果。

标签: javaandroidandroid-recyclerviewexoplayervideo-player

解决方案


所以一步一步解决你的问题

  1. 获取屏幕上可见的项目因此要获取屏幕上可见的项目,您可以使用以下方法

    int findFirstVisibleItemPosition();
    int findFirstCompletelyVisibleItemPosition();
    int findLastVisibleItemPosition();
    int findLastCompletelyVisibleItemPosition();
    

通过使用与您的 recyclerview 一起附加的 LayoutManager,例如:

LinearLayoutManager layoutManager = ((LinearLayoutManager)mRecyclerView.getLayoutManager());
int visiblePosition = layoutManager.findFirstCompletelyVisibleItemPosition();

所以现在使用visiblePosition你可以从适配器获取你的项目

  1. 现在开始和暂停屏幕上可见的视频
    • 从屏幕参考上可见的项目开始视频。关联
    • 暂停向上或向下滚动的视频参考。关联

推荐阅读