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

使用PierfrancescoSoffritti的android-youtube-player在Kotlin中动态修改videoId

android-youtube-player 动态修改videoId实现方案

问题原因

  • findViewById方法本身不接收尾部lambda参数,原写法语法存在错误,若要对获取到的View实例批量操作需配合Kotlin的apply扩展函数
  • app:前缀是布局自定义属性标识,不是所有自定义属性都对应View公开的可直接赋值的成员变量,该库的videoId属性仅用于XML布局初始化时配置默认值,运行时动态修改需调用库提供的播放器API

正确实现代码

在MainActivity的onCreate生命周期中添加如下代码:

// 1. 正确获取YouTubePlayerView实例
val youtubePlayerView = findViewById<com.pierfrancescosoffritti.androidyoutubeplayer.core.player.views.YouTubePlayerView>(R.id.youtube_player_view)
// 2. 绑定当前Activity生命周期,规避内存泄漏(库强制要求步骤)
lifecycle.addObserver(youtubePlayerView)

// 3. 监听播放器初始化完成回调,设置视频ID
youtubePlayerView.addYouTubePlayerListener(object : com.pierfrancescosoffritti.androidyoutubeplayer.core.player.YouTubePlayerListener {
    override fun onReady(youTubePlayer: com.pierfrancescosoffritti.androidyoutubeplayer.core.player.YouTubePlayer) {
        // 自动加载并播放视频:第一个参数为目标videoId,第二个参数为起始播放位置(单位:秒)
        youTubePlayer.loadVideo("替换为你的videoId", 0f)
        // 若仅预加载不自动播放,替换为 youTubePlayer.cueVideo("替换为你的videoId", 0f)
        
        // 若后续需要动态切换视频,可将此处的youTubePlayer实例存为全局变量,随时调用loadVideo/cueVideo传入新ID即可
    }

    // 其余回调方法不需要自定义逻辑时保持空实现即可
    override fun onStateChange(youTubePlayer: com.pierfrancescosoffritti.androidyoutubeplayer.core.player.YouTubePlayer, state: com.pierfrancescosoffritti.androidyoutubeplayer.core.player.PlayerConstants.State) = Unit
    override fun onPlaybackQualityChange(youTubePlayer: com.pierfrancescosoffritti.androidyoutubeplayer.core.player.YouTubePlayer, playbackQuality: com.pierfrancescosoffritti.androidyoutubeplayer.core.player.PlayerConstants.PlaybackQuality) = Unit
    override fun onPlaybackRateChange(youTubePlayer: com.pierfrancescosoffritti.androidyoutubeplayer.core.player.YouTubePlayer, playbackRate: com.pierfrancescosoffritti.androidyoutubeplayer.core.player.PlayerConstants.PlaybackRate) = Unit
    override fun onError(youTubePlayer: com.pierfrancescosoffritti.androidyoutubeplayer.core.player.YouTubePlayer, error: com.pierfrancescosoffritti.androidyoutubeplayer.core.player.PlayerConstants.Error) = Unit
    override fun onCurrentSecond(youTubePlayer: com.pierfrancescosoffritti.androidyoutubeplayer.core.player.YouTubePlayer, second: Float) = Unit
    override fun onVideoDuration(youTubePlayer: com.pierfrancescosoffritti.androidyoutubeplayer.core.player.YouTubePlayer, duration: Float) = Unit
    override fun onVideoLoadedFraction(youTubePlayer: com.pierfrancescosoffritti.androidyoutubeplayer.core.player.YouTubePlayer, loadedFraction: Float) = Unit
    override fun onVideoId(youTubePlayer: com.pierfrancescosoffritti.androidyoutubeplayer.core.player.YouTubePlayer, videoId: String) = Unit
    override fun onApiChange(youTubePlayer: com.pierfrancescosoffritti.androidyoutubeplayer.core.player.YouTubePlayer) = Unit
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:18:03