2013-05-12 217 views
1

我使用Android的Youtube播放器API播放视频,在listview(视频先前已解析JSON等)中选择其中一个视频。问题出现在我只能播放我选择的listview的第一个视频时,导致播放器视图不会在我点击listView的不同元素时发生改变。这是重要的代码:使用YouTube播放器API播放不同的YouTube视频

lista.setOnItemClickListener(new OnItemClickListener(){ 

      @Override 
      public void onItemClick(AdapterView<?> pariente, View view, 
        int posicion, long id) { 

       Video chosen = (Video)pariente.getItemAtPosition(posicion); 
       String urlVideo = chosen.getUrl(); 
       String aux = getYoutubeVideoId(urlVideo); 
       URL_VIDEO = aux; 

       youTubeView.initialize(KEY_DEVELOPER, new YouTubePlayer.OnInitializedListener() { 

        @Override 
        public void onInitializationFailure(Provider arg0, 
          YouTubeInitializationResult arg1) { 
         // TODO Auto-generated method stub 
         Log.d("DEPURANDO: ERROR AL VISUALIZAR", URL_VIDEO); 

        } 

        @Override 
        public void onInitializationSuccess(Provider arg0, 
          YouTubePlayer player, boolean wasRestored) { 
         // TODO Auto-generated method stub 
         if(!wasRestored){  
          Log.d("YOUTUBE", "URL: " + URL_VIDEO); 
          player.cueVideo(URL_VIDEO); 
         } 
        } 
       }); 
      } 

我理解的问题就来了,因为玩家无法初始化两次,所以执行只在OnInitializationSucess输入一次(我测试),因此只播放第一视频。如何解决这个问题呢?

+0

我试图使在列表视图类型的应用,这是我非常失败的球员。当你在列表视图中播放你的第一个视频时,你有没有试过滚动列表?在我的手机中,当我滚动时,它在列表视图中的任何地方都会留下一个黑色的矩形,同样的事情发生在你身上吗? – 2013-05-13 03:26:33

+0

嗯,不,我没有得到同样的错误,在cliking ina视频后listview保持正常工作! – Rafag 2013-05-13 22:15:21

回答

3

检查的YouTube API样本的最后一个版本

YouTube API Samples

我觉得这个样本可能对你有用:

youtube-api-samples

+0

这是行不通的 – Cristiana214 2014-03-04 10:16:17

+0

这个教程对我工作Cristiana214,我希望它也可以帮助你:http://androiddev101.com/episode-12-youtube-it-all-night-long/ – Rafag 2014-03-27 11:19:21

4

你只需要初始化一次,并存储您所在班级的玩家

@Override 
public void onInitializationSuccess(Provider arg0, YouTubePlayer player, boolean wasRestored) { 
    if(!wasRestored){  
     mPlayer = player; 
    } 
} 

之后,您可以通过调用该函数在您的mPlayer上播放任何YouTube网址。

public void playVideo(String url) { 
    if(mPlayer != null) { 
      mPlayer.cueVideo(url); 
    } 
} 
+0

thnq,这帮了我,我我将在我的代码发表评论。 – 2016-06-15 21:26:46

+0

非常有帮助,搜索很多找到它。 – Panache 2017-09-21 14:00:11

0

在点击,只是scrollListToPosition(位置) &如果该项目在列表中最后一项,那么你可以通过计算项目的顶部给予填充。 或者使用YouTubeStandalonePlayer播放视频

Intent intent = YouTubeStandalonePlayer.createVideoIntent((Activity) mContext, YOU_TUBE_API_KEY, VideoID[getLayoutPosition()], 100, false, true); 

mContext.startActivity(intent); 
0

我知道这是很老了,但是对于人们解决这个帖子之后到来。

首先初始化YoutubePlayerView并将YoutubePlayer对象存储在类变量中。

youTubeView.initialize(KEY_DEVELOPER, new YouTubePlayer.OnInitializedListener() { 

       @Override 
       public void onInitializationFailure(Provider arg0, 
         YouTubeInitializationResult arg1) { 
        // TODO Auto-generated method stub 
        Log.d("DEPURANDO: ERROR AL VISUALIZAR", URL_VIDEO); 

       } 

       @Override 
       public void onInitializationSuccess(Provider arg0, 
         YouTubePlayer player, boolean wasRestored) { 
        youtubePlayer = player; 
       } 
      }); 

这里“youtubePlayer”是一个YoutubePlayer类的变量。

现在的onclick监听器里加载视频youtubePlayer

lista.setOnItemClickListener(new OnItemClickListener(){ 

     @Override 
     public void onItemClick(AdapterView<?> pariente, View view, 
       int posicion, long id) { 

      Video chosen = (Video)pariente.getItemAtPosition(posicion); 
      String urlVideo = chosen.getUrl(); 
      String aux = getYoutubeVideoId(urlVideo); 
      URL_VIDEO = aux; 
      youtubePlayer.load(URL_VIDEO); 
     }