2015-12-01 11 views
21

Ich kann Youtube Videos mit cuePlaylist() spielen, aber ich möchte auch zulassen, dass Benutzer auf einen der Listenelemente tippen und dann möchte ich YoutubePlayerView mit dem Videobenutzer aktualisieren nurSo aktualisieren Sie Youtube Player View onItemClickListener() in einem ListView

angezapft

ich verwende cuePlaylist() so immer vorherigen und nächsten Schaltflächen als Standardfunktionalität von Youtube-Player

so kann ich aktualisieren YoutubePlayerView mit der, die ich in einem ListView ausgewählt haben?

Hier ist mein kompletter Code, nach wie vor, wenn ich auf einen des Listeneintrags tippen Sie immer, keine Änderung in YoutubePlayerView aber in der Lage Log Video-ID, die ich in einem ListView geklickt nur ...

 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 

      strVideoID = flowerList.get(i).getUrl(); 
      Log.d("url:", strVideoID); // getting particular video id 

      youTubePlayerFragment.initialize(API_KEY, new YouTubePlayer.OnInitializedListener() { 

       // YouTubeプレーヤーの初期化成功 
       @Override 
       public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) { 
        if (!wasRestored) { 
         player.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT); 
         player.loadVideo(strVideoID); 
         player.play(); 
        } 
       } 

       // YouTubeプレーヤーの初期化失敗 
       @Override 
       public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult error) { 
        // YouTube error 
        String errorMessage = error.toString(); 
        Toast.makeText(MainActivity.this, errorMessage, Toast.LENGTH_LONG).show(); 
        Log.d("errorMessage:", errorMessage); 
       } 
      }); 

     } 
    }); 

    } 

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

     if (!b) { 
      youTubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT); 
      youTubePlayer.cuePlaylist(PLAYLIST_ID); 
     } 

    } 
+0

Versuchen mit strVideoID flowerList.get = (i-1) .getUrl(); statt strVideoID = flowerList.get (i) .getUrl(); Ändern i bis i-1 –

+0

@MaheshwarLigade aber warum, weil ich bin genaue Video-ID bekommen, wenn ich auf Listenelement tippen Sie, das Problem ist, ich bin nicht in der Lage das Video zu spielen, die ich in einer Liste getippt haben – Sophie

+0

ich da Array-Index ist angefangen von 0 bis n, deshalb denke ich, dass es ein Problem mit Index geben sollte. Wie du in OP sagst. –

Antwort

5

Sie sind hier der falsche Ansatz, Sie brauchen nicht jedes Mal auf YoutubePlayerFragment initialisieren aufrufen , die erste Initialisierung ist genug, die Sie in OnCreate Methode

In der Initialisierung Zuhörers Sie in Aktivität implementiert, sollten Sie halten die Referenz von Youtubeplayer in einem Klassenstufe Attribut wie diese

//your class level attribute to keep reference of player 
    YouTubePlayer mYoutubePlayer; 

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

    if (!b) { 
     youTubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT); 
     youTubePlayer.cuePlaylist(PLAYLIST_ID); 
     //Save reference of initialized player in class level attribute 
     mYoutubePlayer = youTubePlayer; 
    } 

} 

Und diese Spieler Attribut Videos innerhalb onItemClick zu laden, anstatt Aufruf initialisieren wieder auf YoutubePlayerFragment mit neuen Hörer

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 

     strVideoID = flowerList.get(i).getUrl(); 
     Log.d("url:", strVideoID); // getting particular video id 
     if(mYoutubePlayer!=null){ 
     mYoutubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT); 
     mYoutubePlayer.loadVideo(strVideoID); 
     mYoutubePlayer.play(); 
     } 

    } 
}); 
+0

Vielen Dank, jetzt, wenn ich auf Listenelement tippe dann spielt es das bestimmte Video, aber nicht CuePlaylist Funktionalität (mein Mittelwert prev und nächste) das ist die Hauptsorge für mich. Ich habe Ihre Antwort als nützlich aktiviert, kann aber nicht akzeptieren, weil ich cuePlaylist Funktionalität benötigen .. Wie kann ich PLAYLIST_ID zusammen mit YOUTUBE_VIDEO_ID – Sophie

+0

prüft dies passieren: http://stackoverflow.com/questions/34260715/how-can-i-pass -Video-ID-zusammen mit-Playlist-ID-in-Cueplaylist – Sophie

+0

@ Sophie, obwohl meine Antwort löst Ihr derzeit genanntes Problem und die Sie auch nur "Player.loadVideo (strVideoID); "in Ihrem onItemClickListener, Und das zweite Problem, das Sie erwähnt haben, fällt nicht darunter, ich habe auch Ihre zweite Frage beantwortet. –

0

Schritt Video all you tube

1 erstellen Sie Rohr Ansicht in xML-Datei zu spielen.

<com.google.android.youtube.player.YouTubePlayerView 
       android:id="@+id/youtube_view" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginBottom="30dp" /> 
  1. innerhalb Java-Datei

    public class MainActivity extends YouTubeBaseActivity implements 
          YouTubePlayer.OnInitializedListener { 
    
         private static final int RECOVERY_DIALOG_REQUEST = 1; 
    
         // YouTube player view 
         private YouTubePlayerView youTubeView; 
    
         @Override 
         protected void onCreate(Bundle savedInstanceState) { 
          super.onCreate(savedInstanceState); 
          requestWindowFeature(Window.FEATURE_NO_TITLE); 
          getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
            WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    
          setContentView(R.layout.activity_main); 
    
          youTubeView = (YouTubePlayerView) findViewById(R.id.youtube_view); 
    
          // Initializing video player with developer key 
          youTubeView.initialize(Config.DEVELOPER_KEY, this); 
    
         } 
    
         @Override 
         public void onInitializationFailure(YouTubePlayer.Provider provider, 
           YouTubeInitializationResult errorReason) { 
          if (errorReason.isUserRecoverableError()) { 
           errorReason.getErrorDialog(this, RECOVERY_DIALOG_REQUEST).show(); 
          } else { 
           String errorMessage = String.format(
             getString(R.string.error_player), errorReason.toString()); 
           Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show(); 
          } 
         } 
    
         @Override 
         public void onInitializationSuccess(YouTubePlayer.Provider provider, 
           YouTubePlayer player, boolean wasRestored) { 
          if (!wasRestored) { 
    
           // loadVideo() will auto play video 
           // Use cueVideo() method, if you don't want to play it automatically 
           player.loadVideo(YOUTUBE_VIDEO_CODE); 
    
           // Hiding player controls 
           player.setPlayerStyle(PlayerStyle.CHROMELESS); 
          } 
         } 
    
         @Override 
         protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
          if (requestCode == RECOVERY_DIALOG_REQUEST) { 
           // Retry initialization if user performed a recovery action 
           getYouTubePlayerProvider().initialize(DEVELOPER_KEY, this); 
          } 
         } 
    
         private YouTubePlayer.Provider getYouTubePlayerProvider() { 
          return (YouTubePlayerView) findViewById(R.id.youtube_view); 
         } 
    
        } 
    
+0

ok r Verwenden Sie YouTubePlayerView, um ein bestimmtes Video abzuspielen oder eine andere Ansicht zum Abspielen von Videos zu verwenden? –

+0

ich lade es jetzt herunter Ich kann das Video sehen. –

+0

Okay, hast du irgendeine Art von vorherigen oder nächsten Button in deiner Videoansicht als Standard? Oder fügst du eine benutzerdefinierte vorherige oder nächste Schaltfläche in der Videoansicht hinzu? –

Verwandte Themen