뷰페이저로 쇼츠 화면을 만들었는데 현재 보고 있는 뷰페이저의 홀더가 아니라
다른 곳에서 영상이 재생되는 현상이 발생했다.
뷰페이저의 특징 때문에 발생한 건데,
뷰페이저는 미리보기로 화면에 보이지 않더라도 주위에 홀더를 1개씩 미리 만들어둔다
그렇기 때문에
vvShortsVideo.addYouTubePlayerListener(
object : AbstractYouTubePlayerListener() {
override fun onReady(youTubePlayer: YouTubePlayer) {
item.id?.let { youTubePlayer.loadVideo(it, 0f) }
}
override fun onStateChange(
youTubePlayer: YouTubePlayer,
state: PlayerConstants.PlayerState
) {
if (state == PlayerConstants.PlayerState.ENDED) {
youTubePlayer.seekTo(0f)
youTubePlayer.play()
}
}
})
지난번에 설정한 loadVideo때문에 미리보기 홀더에서 뷰가 그려진후 바로 재생되니
현재 보고 있던 페이지의 영상이 멈추고 다음 페이지의 영상이 재생되고 있던 것 이었다.
일단 영상이 재생되지 않게 cueVideo로 바꿔주고 현재 보고있는 홀더가 어딘지를 구별해줘야 할 것이다
override fun onViewAttachedToWindow(holder: ShortsViewHolder) {
super.onViewAttachedToWindow(holder)
if (holder is ShortsItemViewHolder) {
currentViewHolder = holder
}
}
현재 홀더 정해주고
private val adapter: ShortsAdapter by lazy {
ShortsAdapter(
onBookmarkChecked = { item ->
item
},
onSharedChecked = { item ->
item
},
onCommentChecked = this::onCommentChecked,
playerReady = { if (it) adapter.currentViewHolder?.playVideo() }
)
}
람다로 리스너를 만들어
유튜브 플레이어를 시작하게 만든다.