我这周也有同样的问题。我的应用只有1个
Activity
,其他都是片段,所以我不想采用扩展
YouTubeActivity
的方法来使用
YouTubePlayerView
。相反,如果你继续阅读文档,会发现
YouTubeFragment包含一个YouTubePlayer
。因此,我将该片段视为视图,并在
MyFragment
的布局中明确放置了一个
<fragment>
标签。在
MyFragment
的
onCreateView
期间,YouTubeFragment会被实例化,然后我可以获得对YouTubeFragment
和YouTubePlayer的引用。
从
MyFragment
的
onCreateView
中调用这个帮助程序
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");
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>...../>
最终产品会给我类似这样的东西。