2013-05-28 16 views
6

Proszę o cierpliwość, ponieważ jestem całkiem nowy na Androida. Próbuję zainicjować odtwarzacz Youtube w klasie fragmentów. Google już dostarczył sposób zainicjować w działalności, która wygląda następująco:Inicjowanie odtwarzacza YouTube w Fragmentach

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

} 

Próbowałem przy użyciu tego kodu, ale jej nie działa:

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

Byłbym bardzo wdzięczny, jeśli ktoś może zapewnić równoważne API dla fragment.

Dzięki

Odpowiedz

4

spróbuje użyć poniższego przykładu:

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> 



tworzenie Fragment

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

W przypadku, że fragment został zniszczony i uzyskać CV (np używając ustawienia Nie zachowuj aktywności), mój mPlayer nie jest już ważny. Inicjalizacja nie dociera już do OnInitilizationSuccess ... ponieważ Youtube może przywrócić swój własny stan. Jak mogę odzyskać mPlayer? – Elye

+1

@ Elye: czy znalazłeś rozwiązanie swojego scenariusza? –

+0

@ Elye wygląda na to, że youtube używa tego samego układu dla obu orientacji, więc żadnych zmian w onConfigurationChanged – user5599807

Powiązane problemy