我试图在一个活动中使用两个YouTubePlayerViews,但似乎没有片段是不可能的。我尝试了下面的代码。


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


公共类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();
}



YouTubePlayerFragment及其属性如下所示。
我在主要活动中声明了一个片段,并设置了它的属性。


到目前为止,我编写的代码是否正确?如何将YouTube片段与主要活动中声明的片段链接?

最佳答案

我建议您不要直接使用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中。请下载并浏览。

10-08 06:52