Как использовать YoutubePlayerFragment внутри представления переработчика, которое находится во фрагменте - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть действие, содержащее 2 или 3 фрагмента в одном из этих фрагментов. Я хочу показать видео с YouTube в представлении утилизатора.

1.

когда я пытаюсь получить доступ к YouTubePlayerFragment, находящемуся в макете элемента переработчика, я получаю эту ошибку

"Type parameter T has incompatible upper bounds: View YouTubePlayerFragment"

public static class MyVideoViewHolder extends RecyclerView.ViewHolder{

    YouTubePlayerFragment youTubePlayerFragment;
    public MyVideoViewHolder(View itemView) {
        super(itemView);

        youTubePlayerFragment=itemView.findViewById(R.id.youtube_player_fragment);

    }
}

я не могу получить доступ к фрагменту с помощью findViewById и не могу получить контекст здесь, я не знаю, как вызватьfindFragmentById здесь, если это будет работать.

2.

другое решение, которое я попробовал, использует frameLayout внутри макета элемента повторного просмотра и затем заменяет фрагмент внутри этого framelayout, но этотакже не работает, я получаю

"No view found for id 0x7f070096 for fragment YouTubePlayerFragment"


 public void onBindViewHolder(@NonNull MyVideoViewHolder holder, final int position) {
    YouTubePlayerFragment youTubePlayerFragment=YouTubePlayerFragment.newInstance();
    ((Activity)mContext).getFragmentManager().beginTransaction().replace(holder.youtubePlayerFrameLayout.getId(),youTubePlayerFragment).commit();
   youTubePlayerFragment.initialize(YoutubePlayerConfig.API_KEY, new YouTubePlayer.OnInitializedListener() {
        @Override
        public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {
            youTubePlayer.cueVideo(videoListDataArrayList.get(position));
        }

        @Override
        public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
            Log.d(TAG,"initilization fail");

        }
    });

1 Ответ

0 голосов
/ 01 мая 2018

Вы можете сделать это легко, используя Android-YouTube-Player .

Просто создайте ViewHolder, содержащий YouTubePlayerView, и все готово.

static class ViewHolder extends RecyclerView.ViewHolder {
        private YouTubePlayerView youTubePlayerView;
        private YouTubePlayer youTubePlayer;
        private String currentVideoId;

        ViewHolder(YouTubePlayerView playerView) {
            super(playerView);
            youTubePlayerView = playerView;

            youTubePlayerView.initialize(initializedYouTubePlayer ->
                    initializedYouTubePlayer.addListener(new AbstractYouTubePlayerListener() {
                        @Override
                        public void onReady() {
                            youTubePlayer = initializedYouTubePlayer;
                            youTubePlayer.cueVideo(currentVideoId, 0);
                        }
                    }), true
            );
        }

        void cueVideo(String videoId) {
            currentVideoId = videoId;

            if(youTubePlayer == null)
                return;

            youTubePlayer.cueVideo(videoId, 0);
        }
    }
}

Остальная часть кода - это просто ваш обычный код представления переработчика.

Вы можете увидеть полный пример здесь .И вы можете попробовать это в примере приложения .

...