我试图在一个活动中使用两个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片段与主要活动中声明的片段相关联?
答案 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中。请下载并完成它。