【问题标题】:How to use YoutubePlayerFragment inside a recycler view which is in a Fragment如何在片段中的回收器视图中使用 YoutubePlayerFragment
【发布时间】:2018-04-26 02:35:23
【问题描述】:

我有一个活动,其中一个片段中有 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");

        }
    });

【问题讨论】:

  • 嘿,你找到解决方案了吗

标签: android android-fragments android-recyclerview android-youtube-api youtubeplayer


【解决方案1】:

您可以使用Android-YouTube-Player 轻松做到这一点。

只需创建一个包含YouTubePlayerView 的 ViewHolder 即可。

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);
        }
    }
}

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

你可以看到一个完整的例子here。您可以在sample app 中试用。

【讨论】:

    猜你喜欢
    • 2020-12-28
    • 2021-12-07
    • 2021-06-26
    • 2021-04-19
    • 1970-01-01
    • 2017-06-13
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多