Как сделать динамический URL-адрес YouTube на манекене и показать его в виде видео

Я не знаю, как показать видео как URL-адрес динамического исходного видео. Это мой манекен

interface DummyMusicDataSource {
    fun getMusicData(context: Context): List<Music>
}

class DummyMusicDataSourceImpl() : DummyMusicDataSource {
    override fun getMusicData(context: Context): List<Music> {

        return mutableListOf(
            Music(
                title = "title",
                imgUrl = "https://raw.githubusercontent.com/ryhanhxx/img_asset/main/IMG_MATERI_3.jpg",
                desc = context.getString(R.string.desc_materi_1),
                videoUrl = "yTRdWD_ar78",
            )
        )
    }
}

Это мой ViewHolder для моей активности

    private fun showMusicData(music: Music?) {
        music?.apply {
            binding.ivImg.load(this.imgUrl) {
               crossfade(true)
            }
            binding.tvTitle.text = this.title
            binding.tvDesc.text = this.desc
            //TODO : binding id videoplayer and show as a video
        }
    }

    private fun playVideo(){
        val youTubePlayerView: YouTubePlayerView = binding.youtubePlayerView
        lifecycle.addObserver(youTubePlayerView)

        youTubePlayerView.addYouTubePlayerListener(object : AbstractYouTubePlayerListener() {
            override fun onReady(youTubePlayer: YouTubePlayer) {
                val videoId = "S0Q4gqBUs7c"
                youTubePlayer.loadVideo(videoId, 0f)
            }
        })

И это мой xml

<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"
                app:videoId = "GYZpknfi5YQ" />

Я хочу сделать «app:videoId» динамическим.

0
0
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам не нужно добавлять app:videoId = "GYZpknfi5YQ" в свой XML.

Есть несколько способов сделать его динамичным. Я предполагаю, что вы вызываете метод playVideo в методе onBindViewHolder. В этом случае в методе onBindViewHolder() вы можете вызвать метод playVideo с URL-адресом в качестве аргумента.

Например:

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    music = musicList[position]
    holder.binding.layoutOfTheListItem.setOnClickListener { playVideo(music.videoUrl) }
    // replace layoutOfTheListItem with the button or layout you want the user to click to load the video
}


private fun playVideo(videoId: String) {
    val youTubePlayerView: YouTubePlayerView = binding.youtubePlayerView
    lifecycle.addObserver(youTubePlayerView)

    youTubePlayerView.addYouTubePlayerListener(
        object : AbstractYouTubePlayerListener() {
            override fun onReady(youTubePlayer: YouTubePlayer) {
                youTubePlayer.loadVideo(videoId, 0f)
            }
        }
    )
}

Другие вопросы по теме