2015-12-01 34 views
21

Mogę odtwarzać filmy z YouTube za pomocą cuePlaylist(), ale chcę również zezwolić użytkownikowi na dotknięcie dowolnego elementu listy, a następnie chcę odświeżać YoutubePlayerView z użytkownikiem wideo tylko postukałJak odświeżyć odtwarzacz YouTube Wyświetl onItemClickListener() w ListView

Używam cuePlaylist() więc dostanie się do poprzedniej i następnej przyciski jako domyślny funkcjonalność odtwarzacza YouTube

więc mogę odświeżyć YoutubePlayerView z jednej mam wybranego w ListView?

Oto mój pełny kod, jeszcze kiedy nie dotknąć dowolnego elementu listy, nie otrzymuję żadnych zmian w YoutubePlayerView ale stanie Log wideo Id który właśnie kliknął w ListView ...

 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

Wypróbuj ze strVideoID = flowerList.get (i-1) .getUrl(); zamiast strVideoID = flowerList.get (i) .getUrl(); Zmień i na I-1 –

+0

@MaheshwarLigade, ale dlaczego, ponieważ dostaję dokładny identyfikator wideo, gdy dotknę elementu listy, problem jest, nie jestem w stanie odtworzyć wideo, które mam wystukał na liście – Sophie

+0

I ponieważ indeks tablicy jest rozpoczęty od 0 do n, dlatego myślę, że powinien być problem z indeksem. Jak wspomniałeś w OP. –

Odpowiedz

5

Używasz niewłaściwego podejścia tutaj, nie trzeba zadzwonić zainicjować na YoutubePlayerFragment każdym razem , wystarczy pierwsza inicjalizacja, którą wykonano w trybie OnCreate

YouTubePlayerFragment youTubePlayerFragment = YouTubePlayerFragment.newInstance(); 
    youTubePlayerFragment.initialize(API_KEY, this); 

W inicjalizacji słuchacz ty wdrożone w działalności, należy zachować odniesienie YoutubePlayer w atrybucie poziomie klasy jak ten

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

} 

i wykorzystać tę cechę player załadować filmy wewnątrz onItemClick zamiast dzwonić zainicjować ponownie YoutubePlayerFragment z nowego słuchacza

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

dziękuję bardzo, teraz, gdy dotknę elementu listy, a następnie jego odtwarzanie tego konkretnego wideo, ale nie pokazuje funkcji cuePlaylist (mój średni prev i następny) to jest głównym problemem dla mnie. Zaznaczam twoją odpowiedź jako przydatną, ale nie mogę jej zaakceptować, ponieważ potrzebuję funkcji cuePlaylist. Jak mogę przekazać PLAYLIST_ID wraz z YOUTUBE_VIDEO_ID – Sophie

+0

Sprawdź to: http://stackoverflow.com/questions/34260715/how-can-i-pass -video-id-along-with-playlist-id-in-cueplaylist – Sophie

+0

@Sophie chociaż moja odpowiedź rozwiązuje twój aktualny wspomniany problem, a ty również użyłeś "odtwarzacza".loadVideo (strVideoID); "w twoim onItemClickListener, a drugi wspomniany przez ciebie problem nie jest objęty nim, ja również odpowiedziałem na twoje drugie pytanie. –

0

krok do odtworzenia dowolnego wideo z rurką:

1 Utwórz widok rury w pliku xml.

<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. wewnątrz pliku java

    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 używasz YouTubePlayerView do odtwarzania określonego filmu lub korzystania z innego widoku do odtwarzania wideo? –

+0

i pobierz go teraz, jestem w stanie zobaczyć wideo. –

+0

okej, czy masz jakiś poprzedni lub następny przycisk w domyślnym widoku wideo lub czy dodajesz niestandardowy poprzedni lub następny przycisk w widoku wideo? –