You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android中动态设置YouTubePlayerView的videoId并加载视频

解决方案:动态加载YouTube视频ID

步骤1:移除XML中的固定视频ID

先把布局里的硬编码app:videoId属性删掉,后续通过代码动态传入视频ID:

<com.pierfrancescosoffritti.androidyoutubeplayer.core.player.views.YouTubePlayerView
    android:id="@+id/youtube_player_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:autoPlay="false" />

步骤2:调整Activity中的播放器逻辑

修改播放器方法,让它支持接收动态视频ID,同时优化生命周期绑定逻辑避免重复操作:

// 在Activity的onCreate中完成播放器初始化,只执行一次
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = YourActivityBinding.inflate(layoutInflater)
    setContentView(binding.root)
    
    // 绑定播放器与页面生命周期
    val youTubePlayerView = binding.youtubePlayerView
    lifecycle.addObserver(youTubePlayerView)
}

private fun showMusicData(music: Music?) {
    music?.apply {
        binding.ivImg.load(this.imgUrl) {
           crossfade(true)
        }
        binding.tvTitle.text = this.title
        binding.tvDesc.text = this.desc
        // 传入数据源中的动态视频ID加载视频
        loadTargetVideo(this.videoUrl)
    }
}

// 改为接收视频ID参数的方法
private fun loadTargetVideo(videoId: String) {
    binding.youtubePlayerView.addYouTubePlayerListener(object : AbstractYouTubePlayerListener() {
        override fun onReady(youTubePlayer: YouTubePlayer) {
            // 使用传入的动态ID加载视频
            youTubePlayer.loadVideo(videoId, 0f)
        }

        // 可选:避免重复监听,在播放器销毁时移除当前监听
        override fun onDestroy() {
            super.onDestroy()
            binding.youtubePlayerView.removeYouTubePlayerListener(this)
        }
    })
}

关键说明

  1. 确保Music类中的videoUrl存储的是纯YouTube视频ID(比如示例中的yTRdWD_ar78),而非完整视频链接,loadVideo方法仅支持传入视频ID。
  2. 如果是在RecyclerView列表中使用,需在ViewHolder的onBind方法中调用loadTargetVideo,并在onViewRecycled中释放播放器资源,防止内存泄漏。

内容的提问来源于stack exchange,提问作者ryhanhxx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:25:25