使用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
相关产品推荐
相关产品推荐

