2013-04-08 16 views
5

xmlマニフェストファイルに静的に追加されたYouTube APIフラグメント、つまり内部にYouTubeプレーヤーがあるフラグメントがあります。方向を変えた後にビデオを再生するフラグメントのフラグメントのインスタンスを保持する方法は?

私のプロジェクトでフラグメントを拡張するファイルがありません。私の活動のクラスで

私は私の活動のクラスのonCreateにこのコード行を置く:

youTubePlayerFragment.setRetainInstance(true); 

これは、任意には影響ありません。私は、画面を回転させたとき、私は、フラグメントの空白の黒い画面を取得します。

方向変更後にフラグメントを再生するにはどうすればよいですか?

<fragment 
     android:id="@+id/youtube_fragment" 
     android:name="com.google.android.youtube.player.YouTubePlayerFragment" 
     android:layout_width="900dp" 
     android:layout_height="500dp" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" /> 

答えて

3

迅速かつ簡単な解決策は、あなたのマニフェストでは、あなたのビデオ活動に以下を追加することです:

android:configChanges="orientation|keyboard|keyboardHidden|screenSize" 

私はビデオのためにこれを使用してアプリを持っているとそれだけで正常に動作します。オリエンテーションの変更にはすべてが適切に配置され、アクティビティとフラグメントのインスタンスは引き裂かれず、シームレスに再生を続けます。

フラグメントインスタンスを保持したままアクティビティを分解/再作成する場合は、setRetainInstance()のドキュメントをもう一度お読みください。 http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean)

2

オリエンテーションが変更されるたびに、アクティビティはすべての子コンポーネントと同じくらい長く再現されます。今重要な部分は、YouTubePlayer.Providerがステージを保持することです(ロードされた動画、現在の再生位置、プレーヤーの設定など)。以下を見て:あなたのケースで

YouTubePlayer Overview

を、向きの変更後、活性は、その子の断片(youTubePlayerFragment)限り、再作成されます。そのため、YouTubePlayerのインスタントと動画を読み込むために必要なデータ(videoIDやvideo URLなど)の参照が失われましたが、YouTubePlayerのプロバイダはまだローテーション後にnullになる以前の状態を保持しています。

ソリューション:あなたが実際に方向を変更デバイスの前にYouTubePlayer上でビデオを再生するために必要なデータを保存すると、アクティビティが再作成されたときに戻ってデータを取得する方法を管理する必要があります。以下を見ている:あなたのコードの構造について

YouTubePlayerFragment Overview

わからないが、しかし、次のコードは、あなたにいくつかのアイデアを与えることを願っています:youtubeplayer上で再生映像を得るためにサンプル

@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"); 
} 

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 !!!"); 
     } 
    }); 
} 
関連する問題