Fad*_*aji 3 youtube video android youtube-api android-fragments
我试图让我的应用程序以片段形式播放YouTube视频,因为此官方文档说您可以分片播放YouTube视频.
但我无法完成它.
这是我的代码:
SingleArticleFragment:
public class SingleArticleFragment extends YouTubePlayerSupportFragment implements
YouTubePlayer.OnInitializedListener {
public static final String API_KEY = "my api key";
public static final String YOUTUBE_VIDEO_CODE = "_oEA18Y8gM0";
// YouTube player view
private YouTubePlayerView youTubeView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.article, container, false);
return v;
}
@Override
public void onViewCreated (View view, Bundle savedInstanceState) {
youTubeView = (YouTubePlayerView) getActivity().findViewById(R.id.youtube_view);
// Initializing video player with developer key
youTubeView.initialize(API_KEY, this);
}
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {
if (!b) {
// loadVideo() will auto play video
// Use cueVideo() method, if you don't want to play it automatically
youTubePlayer.cueVideo(YOUTUBE_VIDEO_CODE);
// Hiding player controls
youTubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.CHROMELESS);
}
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
if (youTubeInitializationResult.isUserRecoverableError()) {
youTubeInitializationResult.getErrorDialog(getActivity(), 1).show();
} else {
String errorMessage = "There was an error initializing the YouTubePlayer";
Toast.makeText(getActivity(), errorMessage, Toast.LENGTH_LONG).show();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是article.xml:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:background="@color/white">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="wrap_content"
android:orientation="vertical">
<!-- Cover Video -->
<com.google.android.youtube.player.YouTubePlayerView
android:id="@+id/youtube_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="30dp" />
<!-- Article Cover Photo -->
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/single_article_cover_photo"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:layout_weight=".14"/>
<!-- Article Title -->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/single_article_title"
android:layout_gravity="center"
android:textColor="@color/black"
android:textSize="20sp"
android:textStyle="bold"
android:padding="10dp"
android:layout_weight=".14"/>
</LinearLayout>
</ScrollView>
Run Code Online (Sandbox Code Playgroud)
LogCat错误:
android.view.InflateException: Binary XML file line #11: Error inflating class com.google.android.youtube.player.YouTubePlayerView
.
.
.
Caused by: java.lang.IllegalStateException: A YouTubePlayerView can only be created with an Activity which extends YouTubeBaseActivity as its context.
Run Code Online (Sandbox Code Playgroud)
那么LogCat告诉我的是:YouTube只能在Activities!中运行,但是android文档却说不然.
请问有人可以帮忙吗?
提前致谢.
你正在混合两种不同的方法.
你可以和a YouTubePlayerView
一起使用YouTubeBaseActivity
,也可以简单地使用YouTubePlayerFragment
/ YouTubePlayerSupportFragment
.使用YouTubePlayerView
内部a YouTubePlayerFragment
是完全错误的.
如果您使用第一种方法(视图+活动),则需要将视图放在XML中,然后将YouTubePlayer
视图设置为在该视图中播放.
如果您使用第二种方法,则只需将片段加载到适当的容器中,初始化YouTubePlayer
并播放视频.
解决方案1
YouTubePlayerView
从您的XML和您的代码中删除,并将其替换为FrameLayout
包含YouTubeSupportFragment
.然后,使用a ChildFragmentManager
加载YouTubeSupportFragment
内部FrameLayout
.
解决方案2
只需让您的活动扩展YouTubeBaseActivity
,保留其他所有内容.