RecyclerView中的视频:什么方法可以防止在屏幕外重启?

时间:2017-11-06 18:15:58

标签: android android-recyclerview android-videoview android-textureview

我有一个带有一些视频元素的RecyclerView,每次他们离开屏幕时都会重新启动。我试过了:

recyclerView.getRecycledViewPool().setMaxRecycledViews(RecyclerViewAdapter.TYPE_VIDEO, 0);

但没有成功。我也尝试过:

holder.setIsRecyclable(false)

在我的适配器内,但视频每次都会重新启动。

有没有办法停止重新启动视频,并以某种方式暂停它们并在它们再次出现在屏幕后恢复它们?

视频是远程的,而不是本地的。我正在使用扩展TextureView的类,而不是Android的VideoView

1 个答案:

答案 0 :(得分:0)

编辑:我很想念这个问题。请参阅下面的原始答案。

我猜你有两种可能性:

  1. 丑陋,只有在列表不会太长时才有可能™并且破坏了recyclerview的目的:使用setItemViewCacheSize(int)来增加缓存到您拥有的视频数量的查看者数量在连接/分离期间暂停和播放。
  2. 更好:当视图符号被连接/解除时,存储和恢复每个视频的当前播放时间戳。
  3. 每当附加/删除视图时,您都可以使用RecyclerView.OnChildAttachStateChangeListener。 这样做:

    mRecyclerView.addOnChildAttachStateChangeListener(new RecyclerView.OnChildAttachStateChangeListener() {
        @Override
        public void onChildViewAttachedToWindow(View view) {
            YourTextureView yourTextureView = (YourTextureView) view.findViewById(R.id.yourvideoviewid);
            if (yourTextureView != null) {
                // start your video
            }
        }
    
        @Override
        public void onChildViewDetachedFromWindow(View view) {
            YourTextureView yourTextureView = (YourTextureView) view.findViewById(R.id.yourvideoviewid);
            if (yourTextureView != null) {
                // stop your video
            }
        }
    });
    
相关问题