0

我有一个活动,其中一个片段中有 2 或 3 个片段我想在回收站视图中显示 Youtube 视频我尝试过的是

1.

当我尝试访问位于 recyclerview 项目布局中的 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.

我尝试的另一个解决方案是在 recyclerview 项目布局内使用 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");

        }
    });
4

1 回答 1

1

您可以使用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);
        }
    }
}

其余代码只是您常用的回收站视图代码。

你可以在这里看到一个完整的例子。您可以在示例应用程序中进行尝试。

于 2018-05-01T12:51:00.067 回答