我试图在一个活动中使用两个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中。请下载并浏览。