2013-05-28 6 views
6

Per favore, vieni con me dato che sono abbastanza nuovo per Android. Sto cercando di inizializzare il player di YouTube in una classe frammento. Google ha già fornito il metodo per inizializzare in attività che va come segue:Inizializzazione del player di YouTube in Fragment

package com.examples.youtubeapidemo; 

import com.google.android.youtube.player.YouTubeBaseActivity; 
import com.google.android.youtube.player.YouTubePlayer; 
import com.google.android.youtube.player.YouTubePlayerView; 

import android.os.Bundle; 


public class PlayerViewDemoActivity extends YouTubeFailureRecoveryActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.playerview_demo); 

    YouTubePlayerView youTubeView = (YouTubePlayerView) findViewById(R.id.youtube_view); 
    youTubeView.initialize(DeveloperKey.DEVELOPER_KEY, this); 
    } 

    @Override 
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, 
     boolean wasRestored) { 
    if (!wasRestored) { 
     player.cueVideo("wKJ9KzGQq0w"); 
    } 
    } 

    @Override 
    protected YouTubePlayer.Provider getYouTubePlayerProvider() { 
    return (YouTubePlayerView) findViewById(R.id.youtube_view); 
    } 

} 

Ho provato ad utilizzare questo codice, ma la sua non funziona:

public class TabFragment5 extends YouTubePlayerFragment implements YouTubePlayer.OnInitializedListener { 
    /** (non-Javadoc) 
    * @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) 
    */ 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     if (container == null) { 
      return null; 
     } 
      YouTubePlayerFragment yf = newInstance(); //new YouTubePlayerFragment(); 
     yf.initialize("dsds", this); 
     return (LinearLayout)inflater.inflate(R.layout.tab_frag4_layout, container, false); 
    } 

    @Override 
    public void onInitializationFailure(Provider arg0, 
      YouTubeInitializationResult arg1) { 
     // TODO Auto-generated method stub 

    } 

     @Override 
     public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, 
      boolean wasRestored) { 
     if (!wasRestored) { 
      player.cueVideo("nCgQDjiotG0"); 
     } 
     } 
} 

sarei molto grato se qualcuno può fornire API equivalente per frammento.

Grazie

risposta

4

tenta di utilizzare il seguente esempio:

fragment.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".VideoFragment" > 
    <fragment 
     android:name="com.google.android.youtube.player.YouTubePlayerFragment" 
     android:id="@+id/youtubeplayerfragment" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 
</RelativeLayout> 



creazione Frammento

VideoFragment videoFragment = VideoFragment.newInstance(VIDEO_ID); 


VideoFragment

public class VideoFragment extends YouTubePlayerSupportFragment { 
    public static final String DEVELOPER_ANDROID_KEY = "KEY"; 

    public static VideoFragment newInstance(String url) { 
     VideoFragment videoFragment = new VideoFragment(); 
     Bundle bundle = new Bundle(); 
     bundle.putString("url", url); 
     videoFragment.setArguments(bundle); 
     videoFragment.init(0); 
     return videoFragment; 
    } 

    private void init(final int time) { 
     initialize(DEVELOPER_ANDROID_KEY, new OnInitializedListener() { 

      @Override 
      public void onInitializationFailure(Provider arg0, YouTubeInitializationResult arg1) { 
      } 

      @Override 
      public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer 
                  player, boolean wasRestored) { 
       mPlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT); 
       id = getArguments().getString("url"); 
       if (!wasRestored) { 
        mPlayer.loadVideo(id, time); 
       } 
      } 
     }); 
    } 
}  
+0

Nel caso in cui il frammento è stato distrutto, e ricevere CV (ad esempio usando l'impostazione Non tenere l'attività), il mio mplayer non è più valido. L'inizializzazione non raggiunge piùInitilizationSuccess ... in quanto YouTube potrebbe ripristinare il proprio stato. Come posso ottenere ripristinare mPlayer? – Elye

+1

@Elye: hai trovato una soluzione per il tuo scenario? –

+0

@Elye sembra che YouTube usi lo stesso layout per entrambi gli orientamenti, quindi nessuna modifica in onConfigurationChanged – user5599807