【问题标题】:YouTubePlayerView in a fragment片段中的 YouTubePlayerView
【发布时间】:2016-11-28 01:28:55
【问题描述】:

我有一个片段,它有一堆 android 视图来播放各种媒体项目 - 图像、mp4 视频、pdf。

我想支持YouTubePlayerView 支持播放 youtube 视频。我知道使用 YouTubePlayerFragment,但我想将 YouTubePlayerView 放在普通片段中。我如何做到这一点?

【问题讨论】:

    标签: android youtube-api android-youtube-api


    【解决方案1】:

    这周我也有同样的问题。我的应用程序中只有 1 个Activity,其他所有内容都是片段,所以我不想使用扩展YouTubeActivity 的文档方法只是为了使用YouTubePlayerView

    相反,如果您继续阅读文档,请注明 YouTubeFragment contains a YouTubePlayer。所以我最终将片段视为一个视图,并在MyFragment 的布局中明确放置了一个<fragment> 标签。在onCreateViewMyFragment 期间,YouTubeFragment 为我实例化,然后我可以获得对 YouTubeFragment AND YouTubePlayer 的引用。

    来自MyFragmentonCreateView 我称这个助手为initYouTube()注意:您真正想要的是YouTubePlayer,而不是YouTubePlayerView,并且像许多编程任务一样,有无数种方法可以完成工作。然后,我保留对播放器和 YT 片段的引用,以供以后在 MyFragment 的生命周期中使用。

    private void initYouTube() {
    
        if (youTubePlayerFragment == null) {
            youTubePlayerFragment = (YouTubePlayerFragment) getFragmentById(R.id.youtube_frag);
            youTubePlayerFragment.initialize(getString(R.string.api_key), new YouTubePlayer.OnInitializedListener() {
                @Override
                public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) {
                    Log.i("Detail","YouTube Player onInitializationSuccess");
    
                    // Don't do full screen
                    player.setFullscreen(false);
                    if (!wasRestored) {
                        youTubePlayer = player;
                        cueVideoIfNeeded();
                    }
                }
    
                @Override
                public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
                    Log.i("Detail", "Failed: "+youTubeInitializationResult);
                    if (youTubeInitializationResult.isUserRecoverableError()) {
                        youTubeInitializationResult.getErrorDialog(getMainActivity(), RECOVERY_DIALOG_REQUEST).show();
                    } else {
                        callToast(youTubeInitializationResult.toString(), true);
                    }
                }
            });
        }
    }
    

    YouTubeFragment XML,嵌套在 MyFragment 的布局 XML 中。

    <RelativeLayout>..../>
    
        <fragment
                        android:id="@+id/youtube_frag"
                        android:name="com.google.android.youtube.player.YouTubePlayerFragment"
                        android:layout_below="@id/detail_animal_action_relative_layout"
                        android:layout_width="match_parent"
                        android:layout_height="150dp"
                        android:layout_marginTop="5dp"
                        android:layout_marginBottom="5dp"
                    />
    
        <TextView>...../>
    

    最终产品给了我这样的东西。

    【讨论】:

    • 你也可以添加你的片段布局xml文件吗?
    • 好了,伙计,补充说。完全希望这有助于为您解决问题。如果您同意,请标记为已接受。
    • 片段中的片段只有在动态添加时才会起作用。
    • 静态完成的嵌套片段可以很好地满足我的需求,并且完全是一种选择。一旦进入我的布局,我就不需要删除/替换它。如果您正在考虑这样做,那么我同意动态添加会更好。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 2011-10-14
    相关资源
    最近更新 更多