在 viewPager 中滑动时停止 Exoplayer

问题描述 投票:0回答:2

我正在制作一个卷轴类型的应用程序。
我制作了 ReelsFragment 和 ReelsAdapter。
我使用 View Pager 2 垂直滑动视图。
我正在使用 Exoplayer 播放视频。

但是我的问题是:

当我滑动视频时,第一个视频的音频仍然播放,或者你可以说彼此重叠。

我还使用了“onViewAttachedToWindow”和“onViewDetachToWindow”函数,但是 当我将视频从第一个视频滑动到第二个视频播放器时,它会停止,但第三个视频的播放器或者您可以说音频开始与第二个视频音频重叠,当我向后滑动播放器时,播放器无法工作,仅显示黑屏。 如果我使用以上两个函数就会出现这些问题。

那么我应该怎样做才能消除所有这些问题呢?
我的卷轴适配器代码是:-

class ReelsAdapter(private val context: Context,
               private var reelsList: ArrayList<Videos>):
RecyclerView.Adapter<ReelsAdapter.VideoHolder>() {



override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VideoHolder {
    return VideoHolder(ItemReelsBinding.inflate(LayoutInflater.from(context), parent, false))
}

override fun onBindViewHolder(holder: VideoHolder, position: Int) {
    holder.videoTitle.text = reelsList[position].title

    holder.setVideoData(reelsList[position])

}



override fun getItemCount(): Int {
    return reelsList.size
}






inner class VideoHolder(binding: ItemReelsBinding): RecyclerView.ViewHolder(binding.root) {

    var videoTitle = binding.videoTitle
    var progressBar = binding.progressBar
    var reelsPlayer = binding.reelsExoplayer
    lateinit var player: ExoPlayer


    fun setVideoData(videos: Videos){

        try {
            player.release()
        }catch (e: Exception){}
        player = ExoPlayer.Builder(context).build()
        reelsPlayer.player = player
        val mediaItem = MediaItem.fromUri(videos.videoUrl!!)
        player.apply {
            this.setMediaItem(mediaItem)
            this.prepare()
        }
        progressBar.visibility = View.GONE
        player.play()


    }

}

override fun onViewAttachedToWindow(holder: VideoHolder) {
    super.onViewAttachedToWindow(holder)
    holder.player.play()
}

override fun onViewDetachedFromWindow(holder: VideoHolder) {
    super.onViewDetachedFromWindow(holder)
    holder.player.release()
    holder.player.prepare()
    holder.player.play()
}

我的ReelFragment代码:-

class ReelsFragment : Fragment() {

private lateinit var player: ExoPlayer
private lateinit var binding: FragmentReelsBinding
lateinit var dBRef: DatabaseReference
lateinit var reelList: ArrayList<Videos>
lateinit var reelsAdapter: ReelsAdapter


override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? {
    val view = layoutInflater.inflate(R.layout.fragment_reels, container, false)
    binding = FragmentReelsBinding.bind(view)

    reelList = ArrayList()
    reelList.add(Videos("abc", "this is 1 tile", "https://firebasestorage.googleapis.com/v0/b/klarify-3f5bc.appspot.com/o/Labour%20Law%20Advisor%2FA4%20(EPS%20increases%20BUT%20Profit%20DOES%20NOT%20%23Shorts.mp4?alt=media&token=2cac5508-21ba-48c1-8327-9a58f1d5a2c9"))
    reelList.add(Videos("abc", "this is 2tile", "https://firebasestorage.googleapis.com/v0/b/klarify-3f5bc.appspot.com/o/Labour%20Law%20Advisor%2FA15%20(Buy%20land%20with%2010%2C000--%20%23Shorts.mp4?alt=media&token=9f125381-7d55-494d-ab40-aa814309d415"))
    reelList.add(Videos("abc", "this is 3 tile", "https://firebasestorage.googleapis.com/v0/b/klarify-3f5bc.appspot.com/o/Labour%20Law%20Advisor%2FA8%20(7%25%20of%20PPF%20Better%20than%2011%25%20of%20Mutual%20Funds.%20HOW%20%23shorts.mp4?alt=media&token=2aee97ea-de77-4b8c-8e3c-103d6b34cdf3"))
    reelList.add(Videos("abc", "this is 4 tile", "https://firebasestorage.googleapis.com/v0/b/klarify-3f5bc.appspot.com/o/Labour%20Law%20Advisor%2FA5%20(Printing%20Money%20is%20not%20the%20solution!%20%23Shorts.mp4?alt=media&token=713a0cb2-c122-4082-8d69-0f53a6dd30ba"))

    reelsAdapter = ReelsAdapter(requireContext(), reelList)
    binding.reelsViewPager.adapter = reelsAdapter






    return view
}
android kotlin exoplayer android-viewpager2
2个回答
0
投票

嘿,你有什么解决方案吗,我也像那个应用程序一样工作,但同样的问题


-1
投票

尝试使用

ViewPager2.OnPageChangeCallback()
这种不同的方法,例如
onPageSelected
onpagescrolled
,这有助于在滚动/滑动时停止第一个视频并播放第二个视频

© www.soinside.com 2019 - 2024. All rights reserved.