Jedes Mal, wenn sich die Ausrichtung ändert, wird die Aktivität so lange neu erstellt wie bei allen untergeordneten Komponenten. Jetzt ist der wichtigste Teil ist, dass, YouTubePlayer.Provider seine Bühnen halten (wie zB: geladene Videos, die aktuelle Abspielposition und Spieler-Konfigurationen). Werfen Sie einen Blick auf die folgenden:
YouTubePlayer Overview
In Ihrem Fall, nachdem die Ausrichtung ändert, wird die Aktivität, solange ihr Kind Fragment (youTubePlayerFragment) neu erstellt. So verloren die Referenz der Youtubeplayer Instant und die Daten (wie videoID oder Video-URL), die notwendig sind, um das Video zu laden, aber die Youtubeplayer des Anbieters noch den vorherigen Zustand gehalten wird, die nach der Drehung null werden.
Lösung: Sie müssen tatsächlich eine Möglichkeit zum Speichern der Daten für das Abspielen des Videos auf YouTubePlayer verwalten, bevor das Gerät die Ausrichtung ändern und die Daten abrufen, wenn die Aktivität neu erstellt wird. Werfen Sie einen Blick auf die folgenden:
YouTubePlayerFragment Overview
Nicht sicher über Ihre Code-Struktur, aber hoffen, dass der folgende Code wird Ihnen eine Vorstellung:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("currentVideoID",videoID);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
videoID = savedInstanceState.getString("currentVideoID");
}
Eine Probe um das Video zu bekommen spielen auf Youtubeplayer
private void loadYouTubePlayer(){
//load your youTubePlayerFragment here, i used YouTubePlayerSupportFragment(),may change in your case
//also you may not need to call getActivity(). Change the code as require
youTubePlayerFragment = (YouTubePlayerSupportFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.youtube_fragment);
youTubePlayerFragment.initialize(developerKey,new YouTubePlayer.OnInitializedListener() {
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {
myYouTubePlayer = youTubePlayer;
myYouTubePlayer.setFullscreenControlFlags(YouTubePlayer.FULLSCREEN_FLAG_CONTROL_ORIENTATION | YouTubePlayer.FULLSCREEN_FLAG_ALWAYS_FULLSCREEN_IN_LANDSCAPE);
myYouTubePlayer.setOnFullscreenListener(new YouTubePlayer.OnFullscreenListener() {
@Override
public void onFullscreen(boolean b) {
isFullScreenPlaying = b;
Log.d(null,"Now fullScreen");
}
});
if (!b) {
myYouTubePlayer.loadVideo(videoID);
}
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
Log.e(null,"Initialization Failed !!!");
}
});
}