0

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

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

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

holder.setIsRecyclable(false)

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

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

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

4

1 回答 1

0

编辑:我误解了这个问题。请参阅下面的原始答案。

我猜你有两种可能:

  1. 丑陋的,只有在列表不会太长并破坏 recyclerview 的目的时才有可能:用于setItemViewCacheSize(int)将缓存的视图数量增加到您拥有的视频数量,并在附加/分离期间暂停和播放。
  2. 更好:当视窗被附加/分离时,存储和恢复每个视频的当前播放时间戳。

您可以使用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
        }
    }
});
于 2017-11-06T18:38:57.557 回答