2016-06-30 5 views
4

Mein XML-Code:Wie füge ich den YouTube Player in mein SupportFragment ein?

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    style="@style/Container.MainBackground" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <fragment android:name="com.google.android.youtube.player.YouTubePlayerSupportFragment" 
     android:layout_alignParentTop="true" 
     android:id="@+id/youtube_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 
</RelativeLayout> 

-Code in Fragmente

public class VideoFragment extends YouTubePlayerSupportFragment implements YouTubePlayer.OnInitializedListener { 

    static private final String DEVELOPER_KEY = "MyKey"; 
    static private final String VIDEO = "ToMpzhdUD1Q"; 
    static private final String VIDEO1 = "K77avo920Jc"; 
    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View videoView = inflater.inflate(R.layout.video_fragment, container, false); 
     getActivity().setTitle("Youtube"); 

     YouTubePlayerSupportFragment youTubePlayerSupportFragment = new YouTubePlayerSupportFragment(); 
     youTubePlayerSupportFragment.initialize(DEVELOPER_KEY, this); 

     return videoView; 
    } 

    @Override 
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) { 

     List<String> list = new ArrayList<>(); 
     list.add(VIDEO); 
     list.add(VIDEO1); 
     youTubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT); 
     youTubePlayer.cueVideos(list); 

    } 

    @Override 
    public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) { 

     Toast.makeText(getContext(), "FAIL!" + youTubeInitializationResult.toString(), Toast.LENGTH_LONG) 
       .show(); 

    } 
} 

In Haupttätigkeit:

getSupportFragmentManager().beginTransaction().replace(R.id.main_container,fragment).addToBackStack(null).commit(); 

Fehler, wenn ich versuche mein Fragment in Schublade zu öffnen:

java.lang.NullPointerExcep tion: Der Versuch, virtuelle Methode ‚Leere com.google.android.youtube.player.YouTubePlayerView.a()‘ auf null Objektverweis auf com.google.android.youtube.player.YouTubePlayerSupportFragment.onStart (Unbekannt aufrufen Quelle)

+0

Irgendwelche Lösung auf diesem? – SkyTreasure

Antwort

1

Das Problem hier ist, dass Sie überschreiben die onCreateView() Methode aus der Superklasse YouTubePlayerSupportFragment, eine Methode, die nicht abstrakt ist, und welches tatsächlich eine Implementierung, wie man sehen:

public View onCreateView(LayoutInflater var1, ViewGroup var2, Bundle var3) { 
     this.c = new YouTubePlayerView(this.getActivity(), (AttributeSet)null, 0, this.a); 
     this.a(); 
     return this.c; 
    } 

Die tatsächlichen Variablennamen und Typen sind nicht Gegenstand dieser Antwort. Was hier zählt, ist, dass YouTubePlayerView ist hier instanziiert zu werden, und Sie überschreiben die Methode, so YouTubePlayerView null ist, wenn sie in der onStart() Methode (auch in gefunden YouTubePlayerSupportFragment) genannt.

public void onStart() { 
     super.onStart(); 
     this.c.a(); 
    } 

daher im Grunde die einzigen Dinge, die Sie brauchen, ist Ihr Videofragment Klasse zu instanziiert, und, wenn Sie das tatsächliche Video wollen, statt einer schwarzen Box, können Sie das Fragment initialisieren müssen, um die Zeitpunkt seiner Erstellung, (so :)

public VideoFragment() 
    { 
     this.initialize("yourAPIKeyHere", this); 
    } 
+1

Ich bin in Xamarin auf dieses Problem gestoßen und Ihr Beitrag hat mich gerettet! Ich musste nur die Initialize-Methode im Konstruktor verwenden. Kommt auch mit sehr guter Erklärung danke! – Elisa

Verwandte Themen