Android:无法在片段中获取YouTube Player API

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文档却说不然.

请问有人可以帮忙吗?

提前致谢.

Seb*_*ano 8

你正在混合两种不同的方法.

你可以和a YouTubePlayerView一起使用YouTubeBaseActivity,也可以简单地使用YouTubePlayerFragment/ YouTubePlayerSupportFragment.使用YouTubePlayerView内部a YouTubePlayerFragment是完全错误的.

如果您使用第一种方法(视图+活动),则需要将视图放在XML中,然后将YouTubePlayer视图设置为在该视图中播放.

如果您使用第二种方法,则只需将片段加载到适当的容器中,初始化YouTubePlayer并播放视频.


解决方案1

YouTubePlayerView从您的XML和您的代码中删除,并将其替换为FrameLayout包含YouTubeSupportFragment.然后,使用a ChildFragmentManager加载YouTubeSupportFragment内部FrameLayout.

解决方案2

只需让您的活动扩展YouTubeBaseActivity,保留其他所有内容.