2014-10-11 187 views
1

我正在使用YouTube Android播放器API在我的应用程序中播放视频。我试图展示视频的缩略图,当有人点击缩略图时,视频就会播放。Android如何显示YouTube视图的ListView

主要活动有一个列表视图,我想添加视频缩略图到这个列表视图。

我创建了这个自定义适配器,

 public class MySimpleArrayAdapter extends ArrayAdapter<String> implements    YouTubeThumbnailView.OnInitializedListener { 
     private final Context context; 
     private final ArrayList<String> values; 
     int videoPosition=0; 
     private YouTubeThumbnailLoader youTubeThumbnailLoader; 
     String API_KEY="MYKEY"; 

    public MySimpleArrayAdapter(Context context, ArrayList<String> values) { 
     super(context, R.layout.thumbnail, values); 
     this.context = context; 
     this.values = values; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     @SuppressLint("ViewHolder") View rowView = inflater.inflate(R.layout.thumbnail, parent, false); 
     videoPosition=position; 
     YouTubeThumbnailView youTubeThumbnailView = (YouTubeThumbnailView)rowView.findViewById(R.id.thumb); 
     youTubeThumbnailView.initialize(API_KEY, this); 

     return rowView; 
    } 

    @Override 
    public void onInitializationSuccess(YouTubeThumbnailView youTubeThumbnailView, YouTubeThumbnailLoader thumbnailLoader) { 
     youTubeThumbnailLoader=thumbnailLoader; 
     thumbnailLoader.setOnThumbnailLoadedListener(new ThumbnailLoadedListener()); 
     youTubeThumbnailLoader.setVideo(values.get(videoPosition));; 

    } 

    @Override 
    public void onInitializationFailure(YouTubeThumbnailView youTubeThumbnailView, YouTubeInitializationResult youTubeInitializationResult) {  
} 


    private final class ThumbnailLoadedListener implements 
      YouTubeThumbnailLoader.OnThumbnailLoadedListener { 

     @Override 
     public void onThumbnailError(YouTubeThumbnailView arg0, YouTubeThumbnailLoader.ErrorReason arg1) { 

     } 

     @Override 
     public void onThumbnailLoaded(YouTubeThumbnailView arg0, String arg1) { 

     } 

    } 
} 

,我该适配器设置为ListView和我传递三个视频标识(如一个ArrayList的)这个适配器,但这样做的问题是每当行youTubeThumbnailLoader.setVideo(values.get(videoPosition))被执行,变量videoPosition是2并且它为所有视频设置相同的缩略图。我想可能是适配器不等待,直到缩略图加载并快速渲染所有行(因为videoPosition的值达到最终值)我试着添加'while(isWait);'在return rowview之前(我在onThumbnailLoadedonThumbnailError函数中将isWait设置为true,isWait是AtomicBoolean),但它不起作用。

有人可以告诉我为什么发生这种情况,以及如何解决?

谢谢:)

回答

1

在此行youTubeThumbnailView.initialize(API_KEY, this);要设置this实施YouTubeThumbnailView.OnInitializedListener

线而是改变这个

youTubeThumbnailView.initialize(API_KEY, new YouTubeThumbnailView.OnInitializedListener(){ 

//override methods here.. 

}); 

您可能需要declar videoPosition最后的回答。

希望这workss ...

+0

谢谢:) 这是一件好事,我今天:) 了解到移动监听器里'初始化()',而不是写'this'工作。我删除了'videoPosition',因为我可以在那里使用'position'。 – Karthik 2014-10-11 16:36:35