Android ExoPlayer playing issue inside ViewPager

726 Views Asked by At

I have a Pager with list of videos' URIs. The issue is ExoPlayer don't playing videos after they were swiped forward and back. At first time videos play normally, but after swiping they don't. Any suggestions?

Page:

<com.google.android.exoplayer2.ui.PlayerView
    android:id="@+id/videoMediaViewer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:controller_layout_id="@layout/exo_player_controls"
    app:resize_mode="fill"/>

Pager callback:

private val pageChangeListener = object : ViewPager.OnPageChangeListener {
    override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
    override fun onPageSelected(position: Int) {
        viewModel.media.value?.get(position)?.let { media ->
            if (media.type == MediaType.Video)
                setVideoForPosition(position, Uri.parse(media.links.original))
        }
    }
    override fun onPageScrollStateChanged(state: Int) {}
}

private fun setVideoForPosition(position: Int, uri: Uri){
        binding.carouselView.containerViewPager.get(position).findViewById<PlayerView>(R.id.videoMediaViewer)?.also {
            if (it.player == null) it.player = exoPlayer
            if (exoPlayer.isPlaying) exoPlayer.stop()
            exoPlayer.setMediaItem(MediaItem.fromUri(uri), 0)
            exoPlayer.prepare()
        }
    }
0

There are 0 best solutions below