如何将YouTube播放器视图用作片段

时间:2016-02-27 17:01:32

标签: java android android-fragments android-studio youtube-api

我试图在一个活动中使用两个YouTubePlayerViews,但如果没有片段,它就不会似乎。我尝试了下面的代码。

  1. 创建了一个新的布局资源文件,并将其名称声明为youtubefragment1.xml,并在其中添加了Youtubeplayer视图。

  2. 创建了一个新的类文件,其中包含以下代码。

  3. 公共类youtubeFragment1扩展了YouTubePlayerSupportFragment {

    private String currentVideoID = "video_id";
    private YouTubePlayer activePlayer;
    
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view =inflater.inflate(R.layout.youtubefragmen1,container,false);
    
        return view;
    
    }
    
    
    public static youtubeFragment1 newInstance(String url) {
    
        youtubeFragment1 youtubeFragment1 = new youtubeFragment1();
    
        Bundle bundle = new Bundle();
        bundle.putString("url", url);
    
        youtubeFragment1.setArguments(bundle);
    
        return youtubeFragment1;
    }
    
    private void init() {
        final String DeveloperKey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    
        initialize(DeveloperKey, new OnInitializedListener() {
            @Override
            public void onInitializationFailure(Provider arg0, YouTubeInitializationResult arg1) { }
    
            @Override
            public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) {
                activePlayer = player;
                activePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT);
                if (!wasRestored) {
                    activePlayer.loadVideo(getArguments().getString("url"), 0);
    
                }
            }
        });
    }
    
    public void onYouTubeVideoPaused() {
        activePlayer.pause();
    }
    
    1. YouTubePlayerFragment及其属性如下所示。

    2. 我在主要活动中声明了一个片段并设置了它的属性。

    3. 到目前为止我编写的代码是否正确?如何将YouTube片段与主要活动中声明的片段相关联?

1 个答案:

答案 0 :(得分:0)

我建议您不要直接使用YouTubePlayerView。按照Google here的建议使用YouTubePlayerFragment。您只需在活动布局中放置两个YouTubePlayerFragment,然后在活动中调用initialize(String, OnInitializedListener),即可创建相应的YouTubePlayer,您可以将其用于将视频加载到片段中。

此外,您可能需要的所有代码都在the samples中提供。

  

到目前为止我写的代码是否正确?

它可能在语法上是正确的,但它违背了YouTubePlayerFragment的目的。 YouTubePlayerFragment负责生成自己的YouTubePlayerView,并在其自己的生命周期回调中处理所有必需的生命周期更改。在您的代码中,您已创建并在YouTubePlayerView 中返回自己的onCreateView(),这些回调将无法处理。所以,据我所知,这段代码似乎是使用YouTubePlayerFragment的错误方法。

  

如何将YouTube片段与主要活动中声明的片段相关联?

我不明白你的意思。通常,要使用片段,请在活动的布局XML文件中声明它。然后,像你一样在你的活动中获得一个参考

YouTubePlayerFragment youTubePlayerFragment =
        (YouTubePlayerFragment) getFragmentManager().findFragmentById(R.id.youtube_fragment);

要解决原始问题,只需在活动的布局文件中使用不同的ID声明两个YouTubePlayerFragment

<fragment
      android:name="com.google.android.youtube.player.YouTubePlayerFragment"
      android:id="@+id/youtube_fragment_1"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"/>
<fragment
      android:name="com.google.android.youtube.player.YouTubePlayerFragment"
      android:id="@+id/youtube_fragment_2"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"/>

并在您的活动中获得对这两者的引用:

YouTubePlayerFragment fragment1, fragment2;
fragment1 = (YouTubePlayerFragment) getFragmentManager().findFragmentById(R.id.youtube_fragment_1);
fragment2 = (YouTubePlayerFragment) getFragmentManager().findFragmentById(R.id.youtube_fragment_2);

现在,只要需要播放,就在两个片段上调用initialize()。

同样,所有代码都在我链接的the samples中。请下载并完成它。