向きが変わるたびに、すべての子コンポーネントがある限り、アクティビティが再作成されます。ここで重要な部分は、YouTubePlayer.Providerがステージ (ロードされたビデオ、現在の再生位置、プレーヤーの構成など) を保持することです。以下をご覧ください。
YouTubeプレーヤーの概要
あなたの場合、向きが変わった後、その子フラグメント(youTubePlayerFragment)である限り、アクティビティが再作成されます。そのため、YouTubePlayer のインスタントの参照と、ビデオをロードするために必要なデータ (videoID やビデオ URL など) を失いましたが、YouTubePlayer のプロバイダーはまだ前の状態を保持しており、ローテーション後に null になります。
解決策:実際には、デバイスが方向を変更する前に YouTubePlayer でビデオを再生するために必要なデータを保存し、アクティビティが再作成されたときにデータを取得する方法を管理する必要があります。以下をご覧ください。
YouTubePlayerFragment の概要
あなたのコード構造についてはよくわかりませんが、次のコードで何らかのアイデアが得られることを願っています:
@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");
}
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 !!!");
}
});
}