如何在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) } }) }
关键说明
- 确保
Music类中的videoUrl存储的是纯YouTube视频ID(比如示例中的yTRdWD_ar78),而非完整视频链接,loadVideo方法仅支持传入视频ID。 - 如果是在RecyclerView列表中使用,需在ViewHolder的
onBind方法中调用loadTargetVideo,并在onViewRecycled中释放播放器资源,防止内存泄漏。
内容的提问来源于stack exchange,提问作者ryhanhxx
相关产品推荐
相关产品推荐

