Как воспроизвести видео с YouTube API с помощью YouTubePlayerFragment?

Я пытаюсь воспроизвести видео в своем фрагменте. Однако я не могу заставить его работать. Если я расширяю 'YoutubeFailureRecovery', я получаю:

09-06 21: 56: 40.472: E / AndroidRuntime (4946): вызвано: java.lang.IllegalStateException: YouTubePlayerView может быть создан только с помощью Activity, который расширяет YouTubeBaseActivity в качестве своего контекста.

Это мой .xml:

<com.google.android.youtube.player.YouTubePlayerView android:id="@+id/player" android:layout_width="match_parent" android:layout_height="wrap_content"/> 

И это класс:

 public class YoutubeFragment extends YoutubeFailureRecovery { YouTubePlayer player; YouTubePlayerView playerView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle arg2) { // TODO Auto-generated method stub return inflater.inflate(R.layout.detailview, container, false); } @Override public void onStart() { // TODO Auto-generated method stub super.onStart(); playerView = (YouTubePlayerView)getActivity().findViewById(R.id.player); playerView.initialize(DataHolder.DEVELOPER_KEY, this); } @Override public void onInitializationSuccess(Provider provider, YouTubePlayer player, boolean wasRestored) { // TODO Auto-generated method stub player.cueVideo("nCgQDjiotG0"); } @Override protected Provider getYouTubePlayerProvider() { // TODO Auto-generated method stub return playerView; } } 

 public abstract class YoutubeFailureRecovery extends YouTubePlayerSupportFragment implements YouTubePlayer.OnInitializedListener{ 

Я просто не знаю, что делать. Я попытался расширить класс Fragment с помощью «YoutubePlayerSupportFragment», попытался добавить видеоподобный фрагмент в XML, но ничего не работает (раздутие ошибки). Может быть, у кого-то есть опыт использования API YouTube в Fragment?

Solutions Collecting From Web of "Как воспроизвести видео с YouTube API с помощью YouTubePlayerFragment?"

YouTubePlayerView работает только с активностью, которая расширяет YouTubeBaseActivity.

Если вы хотите использовать фрагменты, вы должны использовать YoutubePlayerFragment / SupportFragment.

Например, вы можете создать свой пользовательский фрагмент, который наследуется от YoutubePlayerSupportFragment:

 public class VideoFragment extends YouTubePlayerSupportFragment { public VideoFragment() { } public static VideoFragment newInstance(String url) { VideoFragment f = new VideoFragment(); Bundle b = new Bundle(); b.putString("url", url); f.setArguments(b); f.init(); return f; } private void init() { initialize("yourapikey", new OnInitializedListener() { @Override public void onInitializationFailure(Provider arg0, YouTubeInitializationResult arg1) { } @Override public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) { if (!wasRestored) { player.cueVideo(getArguments().getString("url")); } } }); } } 

В коде это может выглядеть так:

 VideoFragment f = VideoFragment.newInstance("your-video-url"); getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, f).commit(); 

« Fragment_container » в этом случае должен быть пустой FrameLayout .

YoutubePlayerFragment лучше всего сравнить с SupportFragment. Потому что, если вы используете supportFragment, вам нужно учитывать API getSupportFragmentManager ().

Фрагменты были доступны от Honey Comb и, следовательно, ваш целевой API должен> = 11

Если вы хотите использовать фрагменты для более старых версий Android, вы должны использовать библиотеку v7 для поддержки Android. И в этом случае ваша MainActivity расширяет ActionBarActivity вместо Activity.

Если вы используете поддержку android v4, ваша MainActivity расширяет FragmentActivity.